Исключение необработанной связи по дуплексному каналу

Я использую дуплексный канал WCF для взаимодействия сервис-обратный вызов и, кроме того, я использую другой сервис на другом порту. Через некоторое время дуплексный канал становится неисправным, но когда я пытаюсь использовать его, я получаю исключение связи (я не знаю, когда канал становится неисправным, и я не могу использовать событие SessionFapted). Время ожидания приема бесконечно, а setTimeout - 30 секунд.

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

Я использовал диагностику / обработку ошибок с расширениями поведения, чтобы исследовать, но не повезло.

Исключение:

2013-12-23 11:00:34,514 ERROR General - An exception was thrown during a service call. 
Details: System.ServiceModel.CommunicationException: The socket connection was aborted. 
This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. 
Local socket timeout was '10675199.02:48:05.4775807'. ---> System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine
   at System.ServiceModel.Channels.SocketConnection.HandleReceiveAsyncCompleted()
   at System.ServiceModel.Channels.SocketConnection.OnReceiveAsync(Object sender, SocketAsyncEventArgs eventArgs)
   --- End of inner exception stack trace ---
   at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
   at System.ServiceModel.Channels.TransportDuplexSessionChannel.TryReceiveAsyncResult.End(IAsyncResult result, Message& message)
   at System.ServiceModel.Channels.TransportDuplexSessionChannel.EndTryReceive(IAsyncResult result, Message& message)
   at System.ServiceModel.Dispatcher.DuplexChannelBinder.EndTryReceive(IAsyncResult result, RequestContext& requestContext)
   at System.ServiceModel.Dispatcher.ErrorHandlingReceiver.EndTryReceive(IAsyncResult result, RequestContext& requestContext)

Есть идеи?

1 ответ

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

Другая сторона закроет свою сторону соединения при получении ошибки.

Это не лучшее решение, так как оно как бы тормозит коммуникационный контракт, но оно делает свою работу.

Другие вопросы по тегам