NAT,wcf,duplex comm ...需要一些见解

时间:2013-11-23 15:58:35

标签: c# .net vb.net wcf client-server

我正在研究做一个双向通信应用程序,不一定是点对点。看着使用wcf,我很好奇所有这一切的内部运作。我最担心的是NAT /防火墙。

我需要在客户端没有端口转发的情况下完成这项工作。我将端口转发服务器,没关系。但是客户端需要能够连接到服务器,然后通过现在打开的(NAT和防火墙)连接来回通信。

我正在stydying的双工wcf示例,似乎都使用宣布给服务器的客户端地址用于回调。假设这是一个本地的局域网地址,不适用于公共连接。如果是公共地址,还需要端口转发吗?

我错过了什么吗?我想建立连接,保持打开状态,并以双面方式使用它。因此,一旦客户端“拨出”,就越过NAT和防火墙限制。

此外,我不太确定如何实施NAT。如果我在端口5555上“连接”到wcf服务的连接,并收到回复,那么来自/到该wcf服务地址的端口5555是否保留在NAT表中?如果我要从服务器wcf服务发出更多连接,并“连接”到客户端上运行的wcf服务(连接到客户端公共IP),NAT表是否会知道它,并将流量转发给客户最初打了个洞?

我的最终实施将是:

远程客户端< - >端口转发后面的服务器< - >管理应用程序向服务器发出命令,将服务器中继到远程客户端。

我试图使用wcf咆哮错误的树吗?我刚开始使用原始tcp开始研究这个问题,但现在再次启动项目,我想通过wcf路由来解决滚动我自己的原始tcp通信的所有开销。

感谢您提供的任何见解。

编辑:[PING-PONG] Hello Word?

1 个答案:

答案 0 :(得分:0)

使用duplex services,您可以在服务器和客户端之间进行独立通信。

关于双工服务需要注意的事项:

  

双工模型不会自动检测服务或客户端何时关闭其频道。因此,如果服务意外终止,默认情况下不会通知服务,或者如果客户端意外终止,则不会通知服务。客户端和服务可以实现自己的协议,如果他们愿意,可以相互通知。

对于阻止您的服务工作的NAT /防火墙设置确实是一个很好的问题。但是,您的情况似乎与客户端和服务器之间的典型双向通信设置一致。我不会怀疑你通过一些试验和错误来解决问题。

  

如果我在端口5555上“连接”到wcf服务的连接,并收到回复,那么来自/到该wcf服务地址的端口5555是否保留在NAT表中?如果我要从服务器wcf服务发出更多连接,并“连接”到客户端上运行的wcf服务(连接到客户端公共IP),NAT表是否会知道它,并将流量转发给客户最初打了个洞?

据我所知,这基本上就是NAT的工作原理。只要您的服务器的公共IP在端口5555上可以访问入站/出站流量,您应该没问题。您应该在Server Fault上研究或询问有关此问题。

  

我试图使用wcf咆哮错误的树吗?我刚开始使用原始tcp开始研究这个问题,但现在再次启动项目,我想通过wcf路由来解决滚动我自己的原始tcp通信的所有开销。

我不认为你正在咆哮错误的树。这取决于你想要完成的事情。 WCF将为您做很多繁重的工作,让您专注于应用程序的核心。但是,如果您想了解有关套接字编程的更多信息,那么滚动您自己的网络API /库将是一件可以继续做的事情。