3

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

4

2 回答 2

0

没有任何内置的方法。

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

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

于 2012-04-09T09:25:18.253 回答
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;
    }

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

于 2012-12-27T14:55:29.127 回答