我正在关注this brilliant piece of article使用WCF剖析和理解聊天。逻辑是,当用户加入聊天时,会为该特定用户创建一个事件处理程序并存储在字典中。
lock (syncObj)
{
if (!checkIfPersonExists(person.Name) && person != null)
{
this.person = person;
chatters.Add(person, MyEventHandler);
userAdded = true;
}
}
因此,为服务中的多个用户存储了多个处理程序。
我的问题是这个 -
如果在事件处理程序的帮助下发送消息,服务如何识别目标用户?我不了解为用户存储的事件处理程序的唯一性。怎么做
handler.BeginInvoke(this, e, new AsyncCallback(EndAsync),
null);
调用客户端中为特定用户实现双工客户端合约接口的功能?这使他们连接?会话?
注意 :我知道如果不仔细阅读这篇文章就很难理解。我已尽力以通用的方式提问。
此致
NLV
答案 0 :(得分:1)
我想你问的是,服务如何响应发布/订阅服务中的客户端。如果是这样,答案是该服务使用客户端“订阅”时提供的callbackchannel OperationContext.Current.GetCallbackChannel<IYourServiceContract>()
。如果您深入研究这个callbackChannel,您将看到它维护了与客户端通信的所有必要数据。如果您注意到,在您链接的示例应用程序中,作者从person对象获取此信息,b / c他想将其存储在chatters Array中。
callback =
OperationContext.Current.GetCallbackChannel<IChatCallback>();
这是我写的一篇文章,可能会为您简化pub / sub模型。 http://www.codeproject.com/KB/WCF/wcfesb.aspx。它不是一个聊天程序,但可能会更多地解释如何通过回调通道实现通信。
如果这不是您所要求的......请澄清。