Lorsqu'une seule ClientBase<T>
instance est utilisé pour plusieurs appels de service WCF, il peut obtenir un canal dans un état de défaut (ie. Lorsque le service est en panne).Comment soigner les canaux WCF défaillants?
Je voudrais guérir le canal automatiquement lorsque le service arrive à nouveau. La seule façon que j'ai trouvé est d'appeler le code suivant avant chaque appel de méthode:
if (clientBase.InnerChannel.State == CommunicationState.Faulted)
{
clientBase.Abort();
((IDisposable)clientBase).Dispose();
clientBase = new SampleServiceClientBase();
}
j'ai eu le sentiment que ce n'est pas la bonne façon de le faire. Quelqu'un a une meilleure idée?
Avez-vous besoin de T également pour implémenter IDisposable? –
@DavidGardiner: Pas si elle implémente 'ICommunicationObject'. L'implémentation 'Dispose' sur les canaux WCF fait partie du problème. – Aaronaught
Mais l'interface ICommunicationObject (http://msdn.microsoft.com/en-us/library/system.servicemodel.icommunicationobject.aspx) ne met pas en œuvre IDisposable - donc l'exemple ci-dessus ne fonctionnera pas sans jeter à co IDisposable. –