【问题标题】:WCF NetTcpBinding callback with multiple clients on same machineWCF NetTcpBinding 回调与同一台机器上的多个客户端
【发布时间】:2015-03-03 00:58:25
【问题描述】:

我在 Windows 服务中托管了一个 WCF 服务。我正在使用 NetTcpBinding 将 WPF 客户端应用程序连接到该服务。我有一个回调合同,允许将通知推送回客户端,它工作得很好,除非在同一台机器上运行多个客户端(例如,两个客户端实例在单独的远程桌面会话中运行)。在这些情况下,似乎只有一个客户端正在接收回调消息。似乎问题是由两个客户端暴露相同的回调地址引起的,因此消息仅发送到其中一个侦听器。

例如,假设我的 WCF 服务托管在机器“fakeserver”上,并且 2 个 WPF 客户端都在机器“fakeclient”上运行。客户端用于连接 WCF 服务的地址是“net.tcp://fakeserver:1234/MyService”。两个客户端都能够很好地连接到服务。但是当服务器发送回调时,它会发送到 'net.tcp://fakeclient:1234/MyCallback' (由于 NetTcpBinding 默认是双工的,我们不必指定单独的端口来发送回调),它有两个不同的客户端监听流量。这些客户端中只有一个接收到该消息。

如果我使用 WSDualHttpBinding,我将能够为客户端回调地址指定不同的端口,从而使两个客户端回调地址唯一。不过,就目前而言,我相信两个客户端回调地址是相同的,这就是为什么消息只发送到一个客户端(通常是最后一个注册的客户端)。

如何确保在同一台机器上的两个(或多个)WPF 客户端被区别对待,并且每个客户端在仍然使用 NetTcpBinding 的同时接收服务推送的任何回调消息?

【问题讨论】:

  • 我很困惑。你是说你在服务上存储了两个回调委托实例,每个客户端一个,你一个接一个地调用它们,但只有一个客户端接收到调用?
  • 是的,汤姆,这是正确的。当一个新的客户端会话开始时,我让它在服务中注册。该服务存储回调代理,当它需要通知所有客户端时,它会循环通过代理以广播消息。但是,当我在同一台机器上有两个客户端时,消息只会发送到一个客户端,而不是两个客户端。
  • 只需在同一个会话中启动不同的客户端实例。为什么这需要跨远程会话工作?
  • Tom,请看我更新的示例。

标签: c# wcf callback nettcpbinding


【解决方案1】:

事实证明,所有回调都可以从同一台机器上调用。回调是按机器名称唯一存储的,所以我们第二次注册回调时,它会替换第一个回调。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多