2009-12-06 4 views
0

Всякий раз, когда я бросаю исключение в моей службе, другое исключение выбрасывается сразу после него:Бросив исключение в службе WCF бросает 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). 

Я реализующий IErrorHandler, так что я могу войти (с использованием log4net) все необработанные исключения:

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

Любая идея, почему это так?

+0

Я бы дважды проверял, действительно ли проблема в обработчике. Я сделал совершенно то же самое. IErrorHandler - это действительный подход, в общем, я бы сказал. – Alex

ответ

1

Проблема заключалась в том, что клиент вызывал прерывание на канале всякий раз, когда я возвращал исключение сбоя.

+0

Какое изменение вы сделали, чтобы исправить это? Удалить вызов для отмены? Замените его чем-нибудь еще (Close)? – Roy

+0

Действительно, клиент должен позвонить Close (или его эквивалент, в зависимости от платформы) –

+0

@MeidanAlon: Как это работает? Вы не можете вызвать Close на канале, который находится в неисправном состоянии, так как он генерирует другое исключение - «Объект связи System.ServiceModel.Channels.ServiceChannel не может использоваться для связи, поскольку он находится в состоянии Faulted». – Divi