Bonjour,
merci pour les réponses.
Je veux faire une méthode de fermeture des channel. J'ai donc besoin d'accéder aux membres des objets stockés dans le dictionnaire. Ceux-ci sont en réalité de type CommunicationObject<T>. Or vu que l'objet Valeur du dictionnaire est de type object, je ne peux pas accéder à ses membres.
Voici la définition de l'objet CommunicationObject<T>:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| internal class CommunicationObject<T>
{
/// <summary>
/// Obtient ou définit le ChannelFactory utilisé pour la communication avec le service WCF
/// </summary>
internal ChannelFactory<T> ChannelFactory { get; private set; }
/// <summary>
/// Obtient ou définit le canal utilisé pour envoyer les messages au service WCF
/// </summary>
internal T Channel { get; private set; }
internal CommunicationObject(ChannelFactory<T> channelFactory)
{
this.ChannelFactory = channelFactory;
this.Channel = channelFactory.CreateChannel();
}
} |
Pour résoudre ceci, j'ai 2 possibilités. La première est de finalement utiliser un dico employant un type "dynamique".
private Dictionary<string, dynamic> m_DicoCommunication = null;
Ce qui donnerait:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| /// <summary>
/// Fermeture des cannaux de communication
/// </summary>
internal void CloseChannels()
{
foreach (var comObj in m_DicoCommunication.Values)
{
var channelFactory = comObj.ChannelFactory;
if ((channelFactory != null) && (channelFactory.State == CommunicationState.Opened))
{
if (channelFactory.State != CommunicationState.Faulted)
channelFactory.Close();
}
}
} |
L'autre possibilité, selon moi, serait de faire à l'ancienne en héritant la classe CommunicationObject<T> par sa version non générique CommunicationObject.
Qu'est-ce qu'il serait le mieux d'après vous ?
Zoax
Partager