如何在wcf中检测客户端是否还活着?

时间:2012-04-09 06:04:45

标签: wcf wcf-client

我有一个WCF实现,我在Windows服务(自托管)中托管它。我使用回调契约来触发客户端的一些事件。
问题是我如何确定或检查客户端是否仍然存在以触发其回调事件。有没有检查机制?我使用.NET 3.5。
感谢。

2 个答案:

答案 0 :(得分:0)

没有任何内置方式。

如果客户端无法处理回调,那么当您尝试调用客户端回调时,您的服务将挂起或抛出异常(取决于回调通道的状态)。

此问题的一种可能解决方案是here

答案 1 :(得分:0)

我遇到同样问题的方法是创建一个“DefaultCallback”类来实现回调接口并且什么都不做(当然它不会抛出任何Not ImplmentedException)。 然后你可以写一些像这样的代码:

    private IServiceCallBack[] GetCallBack()
    {
        var returnValue = new IServiceCallBack[1];

        var com = (ICommunicationObject)(returnValue[0] = OperationContext.Current.GetCallbackChannel<IServiceCallBack>());

        com.Closing += new EventHandler((object sender, EventArgs e) =>
        {
            returnValue[0] = new DefaultCallBack();
        });

        com.Faulted += new EventHandler((object sender, EventArgs e) =>
        {
            returnValue[0] = new DefaultCallBack();
        });

        return returnValue;
    }

因此,每当回调客户端处于关闭或故障状态时,它都会被一个不执行任何操作的兼容对象所取代。