私の WCF サービスは netTcpBinding を使用し、コールバック オブジェクトを持っています。
複数の同時クライアントにサービスを提供し、セッションを維持する必要があるため、サービスは次のように装飾されています
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple]
スレッドのデッドロックを回避するために、コールバック クラスは次のように装飾されています。
[CallbackBehavior(UseSynchronizationContext=false)]
SynchronizationContextUIスレッドでメソッドを実行するために使用します。
問題は、チャネルが理由もなく閉じられる場合があることです (ICommunicationObject.Closingイベントが発生します)。その後、後続のサービス呼び出しで例外が発生します。
トレース ファイルを見ると、最後のメッセージはコールバック コールですが、コールバック メソッドは呼び出されません。例外はありません。
いくつかのデバッグの後、これは同期操作の途中でコールバック呼び出しが行われた場合にのみ発生することがわかりました。手順は次のとおりです。
Aを使用したサービス メソッドへの呼び出しIsOneWay=trueBを使用したサービス メソッドへの呼び出しIsOneWay=falseAコールバック メソッドを呼び出しますが、Bまだ実行中です。
コールバックにはUseSynchronizationContext=false.
単純なシナリオでは問題を再現できませんでした。単純なプロジェクトでこれらの手順を実行すると、正常に実行されます。
何が起こっているのか、または問題を特定する方法について何か考えはありますか?