如何访问NAT后面的WCF服务

时间:2014-06-20 11:58:40

标签: c# wcf network-programming

以下是我的情况:

  • 我在NAT后面有一个带有TCP绑定服务的WCF,我无法做到 到达它。

  • 我可以使用BasicHttpBinding和Raw TCP套接字来访问我的服务。

  • 在服务器端进行端口转发。

可能导致这种情况的原因是什么?

我的网络拓扑:Picture Link

enter image description here

2 个答案:

答案 0 :(得分:2)

我对WCF和nettcpbinding没有经验,但这可能有所帮助。

理论上它是不可能的,因为您的服务具有本地IP地址,对应于其所连接的LAN,而不是公共IP地址。因此,在NAT之外的互联网上无法联系到它。但是,几乎所有NAT设备(可能是您的路由器/接入点)都具有“端口转发”功能。此功能允许您定义发往特定端口的所有数据包都转发到LAN内的特定计算机,并具有专用IP地址。

如果你能克服两个障碍,这可能是一个解决方案:

1 - 我不知道Internet中的节点将如何向回调服务器发送消息。如果它使用收到请求的IP地址,则没有问题。如果它收到回调IP地址,那么你必须弄清楚如何找出你的NAT的公共IP地址(可能是路由器/接入点)并发送出该IP地址。

2 - NAT后面的服务需要打开客户端端口或临时端口,以便与NAT外部的服务进行通信。如果第二个消息发送到收到消息的客户端端口,则必须找到一种方法来确定要打开的客户端端口(必须与端口转发中配置的端口相同)。默认情况下它会在端口808中监听吗?

我希望这会有所帮助。

答案 1 :(得分:1)

检查URI" net.tcp://0.0.0.0:8000",这将确保该服务将接受来自任何入站IP地址的连接。在服务器端,URI&中提到的IP地址。接受连接的地址不同,因此服务器正在断开连接。