【问题标题】:Creating separate handlers for different users - WCF chat为不同的用户创建单独的处理程序 - WCF 聊天
【发布时间】:2010-06-24 11:06:17
【问题描述】:

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

【问题讨论】:

    标签: c# .net wcf chat duplex


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 2020-04-15
      • 2023-04-07
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多