2016-12-05 12 views
0

資格情報に関する情報を取得するWCFサービスとクライアントの数があります。 私はこれらのクライアントのリストを監視し、(接続の切断やアプリケーションのクラッシュなどにより)クライアントの一部が突然死に至るかどうかを検出したいのですが。 これを行うにはどうすればよいですか?WCFでクライアント接続を確認する最も良い方法は何ですか

二重通信契約は最良の解決策ではないと理解しています。

+1

あなたはどのようにクライアントに接続していますか? WCFは、TCP、名前付きパイプ、...のように少し広範なものです。 最もスケーラブルなソリューションではありませんが、ポーリングは常に機能するはずです... – ChrFin

答えて

2

これを行う1つの方法は、「ハートビート」を実装することです。これを行うには、クライアントのコレクションを保持します。クライアントに最小限の情報(ハートビートメッセージ)を含む簡単なメッセージを送信させます。

サーバ側では、定期的にクライアントのリストを調べて、「古くなった」ものがあるかどうかを確認する退去処理を実行します(つまり、しばらくの間ハートビートを受信して​​いない)。

1

CommunicationExceptionを捕まえることとは別に、これを行うには本当に良い方法はありません。 イベントを見て、接続の状況を監視することもできます。

client.InnerChannel.Closed += OnChannelClosed; 
client.InnerChannel.Opening += OnChannelOpening; 
client.InnerChannel.Opened += OnChannelOpened; 
client.InnerChannel.Closing += OnChannelClosing; 
client.InnerChannel.Faulted += OnChannelFaulted; 
client.InnerChannel.UnknownMessageReceived += OnChannelUnknownMessageReceived; 
関連する問題