检查wcf客户端连接

时间:2011-03-03 07:39:44

标签: wcf duplex

我正在使用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

但是在这里我也将错误的客户连接到了状态。

1 个答案:

答案 0 :(得分:2)

是的,您可以在每个服务合同中加入Ping()方法,并在实际通话前致电。

但这真的告诉你什么?

首先,即使调用.Ping()也可能导致异常(因为服务已经消失,过载,无论如何)。

如果成功 - 它绝对无保证你下次拨打同样的服务,一秒后,有机会成功......

基本上,我觉得这种方法很浪费 - 你需要编写很多代码,最后,它确实没有给你任何有意义的信息。

您需要做的是:在每次服务电话上准备它可能会失败 - 无论出于何种原因。不要浪费你的时间和处理周期在你的系统上乱逛 - 它无论如何都不会给你任何有意义的信息。

只需进行服务调用,准备好处理失败(并可能回收你的WCF代理) - 这就是你真正能做到的。