2009-04-13 12 views
11

Nous obtenonsWCF Erreur L'objet de communication, System.ServiceModel.Channels.ServiceChanne, ne peut pas être utilisé pour la communication car il est dans l'état Faulted

« L'objet de communication, System.ServiceModel.Channels.ServiceChannel, ne peut pas être utilisé pour la communication car il est en état Faulted. "

message lorsque nous fermons l'application. Quelqu'un peut-il me dire comment y remédier? Nous savons que c'est un canal de communication qui essaie de se fermer mais il n'est pas capable de fermer en raison d'un service non disponible ou en état de panne. Tout ce que je peux dire, c'est que, lorsque le service n'est pas disponible, mais que le collecteur de place essaie de détruire l'objet, les objets de communication appellent sa fonction de fermeture de service. Là nous avons l'exception.

+0

Ne répondra pas car je ne peux pas vous dire POURQUOI sa faute; mais vous pouvez toujours vérifier si c'est dans l'état défectueux avant d'essayer de le fermer. – Will

Répondre

12

Lorsque vous posez une question à propos d'une exception, vous devez publier l'intégralité de l'exception, y compris toutes les instances InnerException. Vous devez attraper l'exception, affichage ex.ToString(), réémettre alors l'exception de « jeter »:

try { 
    // Do whatever causes the exception 
} catch (Exception ex) { 
    Console.WriteLine(ex.ToString()); // Or Debug.Print, or whatever 
    throw; // So exception propagation will continue 
} 

Dans ce cas, je me demande si vous avez un en utilisant le bloc autour de votre proxy instanciation:

Il y a une faille de conception dans WCF qui en fait le seul endroit dans .NET où vous ne devriez pas utiliser un en utilisant le bloc. Au lieu de cela, vous devez le faire à la main. Voir http://web.archive.org/web/20100703123454/http://old.iserviceoriented.com/blog/post/Indisposable+-+WCF+Gotcha+1.aspx. En outre, voir "What is the best workaround for the WCF client using block issue?" et "Indisposable WCF clients".

+0

FYI - le lien est cassé. –

+0

@AlexR: Merci. Correction via Wayback Machine, et ajouté deux autres liens. –

0

Jetez un oeil au projet de proxies here.

Nous avons eu un problème similaire et cette technique l'a corrigé. Il s'agit essentiellement d'hériter d'une classe qui recréera automatiquement le canal s'il y a des fautes.

Questions connexes