0

サービスとコールバックの相互作用に WCF 二重チャネルを使用しており、さらに別のポートで別のサービスを使用しています。しばらくすると、デュプレックス チャネルに障害が発生しますが、使用しようとすると通信例外が発生します (チャネルにいつ障害が発生するかがわからず、SessionFaulted イベントを使用できません)。受信タイムアウトは無限で、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)

何か案は?

4

1 に答える 1

0

長い調査の結果、他に選択肢がなかったので、古いコールバックと新しいコールバックの参照を比較し、異なる場合は古いコールバックを置き換えることにしました。

反対側は、障害を受信すると接続の側を閉じます。

これは、通信契約にブレーキをかけるようなものなので、最善の解決策ではありませんが、仕事はします。

于 2014-03-11T08:19:27.253 に答える