1

我正在关注这篇精彩的文章来剖析和理解使用 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

4

1 回答 1

1

我想您是在问,服务如何响应发布/订阅服务中的客户端。如果是这样,答案是服务使用OperationContext.Current.GetCallbackChannel<IYourServiceContract>()客户端“订阅”时提供的回调通道。如果您深入研究此回调通道,您会发现它维护着与客户端通信所需的所有数据。如果您注意到,在您链接的示例应用程序中,作者正在从 person 对象中获取它,b/c 他想将它存储在 chatters 数组中。

callback = 
                 OperationContext.Current.GetCallbackChannel<IChatCallback>(); 

这是我写的一篇文章,它可能会为您简化 pub/sub 模型。 http://www.codeproject.com/KB/WCF/wcfesb.aspx。它不是一个聊天程序,但可能会更多地解释如何通过回调通道实现通信。

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

于 2010-07-19T17:12:46.040 回答