在同一台计算机上具有多个客户端的WCF NetTcpBinding回调

本文关键字:客户端 回调 NetTcpBinding WCF 计算机 一台 | 更新日期: 2024-09-19 23:25:15

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

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

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

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

在同一台计算机上具有多个客户端的WCF NetTcpBinding回调

事实证明,所有回调都可以从同一台机器上调用。回调是按机器名唯一存储的,所以第二次注册回调时,它将取代第一次回调。