WCF NetTcpBinding回调与同一台机器上的多个客户端

时间:2015-03-03 00:58:25

标签: c# wcf callback nettcpbinding

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

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

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

如何确保同一台计算机上的两个(或多个)WPF客户端得到明确处理,并且每个客户端仍在使用NetTcpBinding时接收服务推送的任何回调消息?

1 个答案:

答案 0 :(得分:1)

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