Microsoft のサンプルであるDesign Patterns: List-Based Publish-Subscribe にほぼ従っている WCF アプリケーションで pub-sub モデルを使用しています。
このサービスは と の概念を提供しsubscribe()
ますunsubscribe()
が、クライアントが停止したりチャネルに障害が発生した場合の状況でクリーンアップを処理するためのベスト プラクティスは何ですか? 現在、クライアントがサブスクライブすると、現在InstanceContext
のClosed
およびFaulted
イベント (サービス ユーザーは PerSession インスタンス コンテキスト モードと netTcpBinding)にハンドラーをアタッチします。
_communicationObject = OperationContext.Current.InstanceContext;
_communicationObject.Closed += OnClientLost;
_communicationObject.Faulted += OnClientLost;
OnClientLost
ただし、ハンドラーはクライアントのサブスクライブを解除するだけです。
- 上記は良い方法であり、クライアントが二重通信を切断したときにすべての状況を捉えるのに十分なだけの堅牢性を備えていますか? それとも、サービスがクライアントとの通信を試みた時点で発生した例外を処理し、クリーンアップを処理する必要がありますか?
- クライアント コールバック ハンドラのサブスクライブを解除するだけでなく、特に障害が発生した場合にさらにクリーンアップを実行する必要がありますか?
この質問は同様の質問を提起しますが、最終的には、サブスクライブおよび/またはサブスクライブ解除を呼び出すクライアント以外のケースに対する回答を提供しません
ありがとう