2013-12-23 4 views
0

Я использую дуплексный канал WCF для взаимодействия с обратным вызовом службы и, кроме того, я использую другую услугу на другом порту. Спустя некоторое время дуплексный канал становится неисправным, но когда я пытаюсь его использовать, я получаю исключение связи (я не знаю, когда канал становится сбойным, и я не могу использовать событие SessionFaulted). Тайм-аут приема является inifinite и 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) 

Любые идеи?

ответ

0

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

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

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