WCF を使用して .Net 3.5 でクライアント/サーバー アプリケーションを開発しています。基本的に、長時間実行されているクライアント サービス (複数のマシン上) は、netTcpBinding を介してサーバーへの二重接続を確立します。次に、サーバーはクライアントのコールバック コントラクトを使用して特定のオンデマンド操作を実行し、クライアントは非同期方式で応答します (かなり標準的なものだと思います)。DuplexClientBase クラスをサブクラス化して、ほとんどの通信を処理します。
残念ながら、いずれかの側で何か問題が発生した場合 (ネットワーク障害、予期しない例外など)、チャネルに障害が発生したり中止されたりして、後続のすべての操作が失敗します。クライアントが障害を起こしたときに自動的にピックアップして操作を再試行する RecoveringClientBase クラスを作成することで、非二重チャネルでのこの制限を回避しました。
私の質問は、デュプレックス チャネルに障害が発生したことを判断する確立された方法はありますか? サーバーまたはクライアントのどこでこれを確認する必要がありますか? それができない場合、接続が再確立されるようにするために必要なオプションは何ですか?
更新:サーバーが障害が発生したコールバック チャネルを使用しようとする可能性がある二重チャネルに固有のアドバイスを探しています。したがって、チャネルに何かが発生したときにすぐに再接続/再サブスクライブするものが必要です。現時点では、チャネルの Closing イベントをリッスンしており、状態が Closed 以外の場合は再作成しています。ある程度は機能しますが、ハッキーに感じます...