WCFデュプレックスコールバックを使用してクライアントサービスアプリケーションを作成しています。このサービスは、接続されているすべてのクライアントにメッセージを送信します。接続されているすべてのクライアントを辞書に保存しています。クライアントにメッセージを送信する前に、クライアントが異常にシャットダウンしたかどうかを確認したいと思います(ネットワークの切断、電源オフ)。
@marc_s:辞書で接続されているクライアントの通信状態をチェックするCheckCallbackChannelsメソッドを作成しました。
Sub CheckCallbackChannel()
For Each objClient As KeyValuePair(Of Guid, IClientCallBack) In MainService.objClients
Dim objClientCallBack As IClientCallBack = MainService.objClients.Item(objClient.Key)
Dim callbackChannel As ICommunicationObject = TryCast(mobjClientCallBack,ICommunicationObject)
'Dim state As CommunicationState = callbackChannel.State
If callbackChannel.State = CommunicationState.Opened OrElse callbackChannel.State = CommunicationState.Faulted Then
MainService.objClients.Remove(objClient.Key)
End If
Next
End Sub
しかし、ここでは、障害のあるクライアントにも接続されている状態を取得します。