在NetTcpBinding上指定客户端端口(和IP)

时间:2011-03-20 02:34:55

标签: wcf wcf-binding

是否无法通过NetTcpBinding指定用于服务器调用的本地客户端端口?

NetPeerTcpBinding支持这一点 - 我发现很难相信没有办法在客户端上指定本地端口(以及IP地址)。

我需要能够使用端口共享,如果我不知道客户端正在侦听哪个端口,我就不能这样做。我将无法与另一个客户端共享端口(和IP),因此可以连接。

我找到的唯一解决办法就是:

  • 客户端A打开与服务器的连接
  • 服务器记录客户端A的IP和端口
  • 服务器共享此信息。同 客户B
  • 客户B应该能够 在指定的IP上连接到客户端A. 和港口(理论上)

我认为这称为TCP / IP NAT打孔。有经验的人吗?

1 个答案:

答案 0 :(得分:2)

您可能无法理解NetTcpBinding的通信模式。它的工作原理如下:

  1. 客户端打开与服务器的连接
  2. 双向通信:客户端呼叫服务器,通过同一连接获取响应
  3. 双工通信:客户端呼叫服务器。服务器在某处存储对通道的引用(您必须实现此操作)。一旦服务器想要通知客户端存储通道所需的任何内容,并且在客户首次通话期间建立的连接上调用客户端
  4. 服务器永远不会打开与客户端的连接。客户端不会公开任何带有端口的地址以进行通信。如果要这样做,必须以与在服务器上执行服务相同的方式在客户端上实现服务,并且必须手动将地址和端口发送到服务器公开的服务。

    NetPeerTcpBinding的区别在于没有真正的服务器,任何客户端都必须能够获得请求。 NetTcpBinding用于客户端 - 服务器方案,其中服务器是唯一能够处理收到请求的对等方。因此,只有服务器需要定义地址和端口。