2009-12-06 20 views
0

Chaque fois que je jette une exception dans mon service, une autre exception est levée juste après:Lancer une exception dans un service WCF jette un CommunicationException

System.ServiceModel.CommunicationException: There was an error reading from the 
pipe: Unrecognized error 109 (0x6d). ---> System.IO.PipeException: There was an 
error reading from the pipe: Unrecognized error 109 (0x6d). 

Je suis en œuvre IErrorHandler je peux vous connecter (en utilisant log4net) toutes les exceptions non gérées:

bool IErrorHandler.HandleError(Exception error) 
    { 
     if (!(error is FaultException)) 
     { 
      logger.Fatal("Unhandled Exception", error); 
     } 
     return false; 
    } 

Une idée pourquoi est-ce?

+0

Je revérifierais si le problème réside vraiment dans le gestionnaire. J'ai fait exactement la même chose. Le IErrorHandler est une approche valide en général, je dirais. – Alex

Répondre

1

Le client appelait Abort sur le canal à chaque fois que je renvoyais une exception de panne.

+0

Quel changement avez-vous fait pour résoudre ce problème? Supprimer l'appel à Abandonner? Remplacez-le par autre chose (Fermer)? – Roy

+0

En effet, le client doit appeler Fermer (ou son équivalent, selon la plateforme) –

+0

@MeidanAlon: Comment cela a-t-il fonctionné? Vous ne pouvez pas appeler Fermer sur un canal qui est dans un état défectueux car il déclenche une exception différente - "L'objet de communication, System.ServiceModel.Channels.ServiceChannel, ne peut pas être utilisé pour la communication car il est en état Faulted." – Divi