识别WCF服务中的客户端

Tam*_*lei 6 service wcf duplex

我有一个工作的双工WCF服务WSDualHttpBinding.我的问题是找出一种方法来存储具有唯一ID的回调通道.该服务旨在长期运行.我可以简单地在OperationContext.Current.GetCallbackChannel()调用"Subscribe"方法时获取返回值并将其存储在列表或字典中吗?在连接存活之前,它是否保证有效?

Jas*_*ran 5

最简单的方法是让客户端在您的服务的Subscribe方法中提交密钥值.然后,您可以将Callback通道保存在字典中.这个字典可能需要是一个静态变量或单例类,其寿命大于服务类的生命周期,因为大多数服务类具有PerCall生命周期并在服务调用完成后被处理掉.小心线程问题!

回调通道可以在客户端或服务端随时出现故障.该服务必须处理故障通道的可能性并从字典中删除故障通道.WSDuallHttpBinding是一个"无状态"绑定,因此在服务端尝试调用它们之前,不会在服务端检测到客户端中的任何故障.如果客户端进入故障状态,NetTcpBinding将引发ChannelFaulted事件.因此,如果符合您的要求,我会推荐NetTcpBinding.

public bool Subscribe(string id) {
        ICallback callback = OperationContext.Current.GetCallbackChannel();
        if (!_activeCallbackChannels.Contains(id)) {
            _activeCallbackChannels.Add(id, callback);
            return true;
        }
        else {
            return false;
        }

    }
Run Code Online (Sandbox Code Playgroud)