【问题标题】:How to Access WCF Service Behind NAT如何在 NAT 后访问 WCF 服务
【发布时间】:2014-06-20 11:58:40
【问题描述】:

这是我的情况:

  • 我在 NAT 后面有一个带有 TCP 绑定服务的 WCF,但我不能 到达那里。

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

  • 在服务器端完成端口转发。

这可能是什么原因?

我的网络拓扑:Picture Link

【问题讨论】:

  • 听起来你需要添加一些防火墙规则。路由器负责地址转换。
  • 你能从与服务器在同一网络上的客户端通过 net tcp 连接吗?我会先对此进行测试,以消除等式中的防火墙/端口转发/等问题。
  • 您是否已经考虑过 CORS?您正在使用不同的 IP 地址。当我阅读有关rodolk 答案的cmets 时,它必须是CORS 问题。您是否还会收到“CONNECTION REFUSED”错误或类似错误?

标签: c# wcf network-programming


【解决方案1】:

我没有使用 WCF 和 nettcpbinding 的经验,但这可能会有所帮助。

理论上这是不可能的,因为您的服务有一个本地 IP 地址,对应于它所连接的 LAN,而不是公共 IP 地址。因此无法从 NAT 之外的 Internet 访问它。然而,几乎所有的 NAT 设备,可能是您的路由器/接入点,都具有“端口转发”功能。此功能允许您定义将所有发往特定端口的数据包转发到您 LAN 内的特定机器,并使用私有 IP 地址。

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

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

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

我希望这会有所帮助。

【讨论】:

  • 我可以在NAT后面的机器和客户端之间建立原始的TCP/IP连接。所以端口开放似乎没有问题。但是有些怎么连接不上wcf服务
  • 我可以使用 BasicHttpBinding 进行连接。但不能使用 Net Tcp
  • 关于第一个评论,那个客户在哪里?在 NAT 之外?第二条评论:您需要确定net TCP服务使用的(接收)端口是哪个?总是一样吗?
  • 1-您在 WCF 客户端中收到的确切异常消息是什么?让我们检查它是TCP层还是应用层。 2-可以在客户端主机中使用Wireshark吗?
  • 客户端获取错误:System.ServiceModel.CommunicationException:套接字连接已中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或者是潜在的网络资源问题引起的。本地套接字超时为“00:09:59.9939913”。 ---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多