2013-12-23 7 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

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

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

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

Смежные вопросы