为不同用户创建单独的处理程序 - WCF聊天

时间:2010-06-24 11:06:18

标签: c# .net wcf chat duplex

我正在关注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

1 个答案:

答案 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。它不是一个聊天程序,但可能会更多地解释如何通过回调通道实现通信。

如果这不是您所要求的......请澄清。