【问题标题】:check wcf client connection检查 wcf 客户端连接
【发布时间】:2011-07-07 20:50:10
【问题描述】:

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

但在这里我也得到了故障客户端的连接状态。

【问题讨论】:

  • @marc_s:我创建了一个 CheckCallbackChannels 方法,它将检查字典中连接客户端的所有通信状态状态。

标签: wcf duplex


【解决方案1】:

是的,您可以在每个服务合同中包含一个 Ping() 方法,并在您实际调用之前调用它。

但这真的告诉你什么?

首先,即使是对.Ping() 的调用也可能导致异常(因为服务消失、过载等等)。

如果它成功了 - 它绝对不保证您对同一服务的下一次调用,一微秒后,有任何成功的机会......

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

您需要做的是:为可能失败的每个服务调用做好准备 - 无论出于何种原因。不要浪费你的时间和处理周期在你的系统中到处寻找——它无论如何都不会给你任何有意义的信息。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多