识别 WCF 服务中的客户端
Posted
技术标签:
【中文标题】识别 WCF 服务中的客户端【英文标题】:Identifying clients in a WCF service 【发布时间】:2011-11-09 08:25:08 【问题描述】:我有一个使用 WSDualHttpBinding
的双工 WCF 服务。我的问题是找出一种方法来存储具有唯一 ID 的回调通道。该服务旨在长期运行。我可以在调用“订阅”方法时简单地获取OperationContext.Current.GetCallbackChannel()
返回值并将其存储在列表或字典中吗?是否保证在连接有效之前有效?
【问题讨论】:
【参考方案1】:最简单的方法是让客户端在您的服务的订阅方法中提交一个键值。然后,您可以将回调通道保存在字典中。这个字典可能需要是一个静态变量或单例类,其生命周期大于服务类的生命周期,因为大多数服务类都有一个 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;
【讨论】:
以上是关于识别 WCF 服务中的客户端的主要内容,如果未能解决你的问题,请参考以下文章