【问题标题】:WCF net.tcp over internet without changing firewall settings?WCF net.tcp 通过互联网而不更改防火墙设置?
【发布时间】:2014-08-19 14:10:36
【问题描述】:

我有一个客户端和一个主机应用程序。客户端可以发送消息并返回回调消息。

我使用此代码在客户端创建双工通道:

proxy = DuplexChannelFactory<IMonitor>.CreateChannel(new InstanceContext(this), new NetTcpBinding(SecurityMode.None), new EndpointAddress(endpoint));

在主机应用程序上,我自行托管服务:

using (ServiceHost host = new ServiceHost(typeof(MonitorImpl.Monitor), new Uri(uri)))
{
    host.Open();
    Console.WriteLine("Service is hosted, has the following endpoints.");
    host.Description.Endpoints.ToList().ForEach(end => Console.WriteLine(end.Address));

    return Console.ReadLine();
}

您可能已经注意到,我有一个名为:MonitorImpl 的项目,其中包含 Monitor 类。这个类包含了我用来调用服务的方法和回调方法的代码。

该程序在本地运行,如果我在托管主机应用程序的计算机上打开端口,它也可以在两台不同的计算机上运行(在同一网络中)。

我的问题是:我怎样才能在 2 台不同的计算机上(通过互联网)进行这项工作,而不必更改托管应用程序的计算机上的防火墙?我是否需要更改绑定到其他东西的类型,如果是这样......到什么?我是否需要更改创建双工通道的方式或位置?还有什么?

【问题讨论】:

    标签: c# wcf firewall nettcpbinding duplex


    【解决方案1】:

    无论您使用哪种绑定(是否双工),甚至是否托管 WCF 服务或任何其他类型的侦听 TCP 或 UDP 套接字的应用程序:您始终必须确保主机的防火墙接受服务侦听端口上的传入连接。默认情况下,任何合理的防火墙配置都会阻止传入连接。

    解决此问题的唯一方法是通过 VPN 或防火墙已经为其开放端口的某种代理服务建立隧道。

    【讨论】:

    • 我最初的计划是让主机设置双工连接,这样防火墙就会认为没问题(因为他自己发送的?)并且能够在路上的某个地方取回消息我似乎已经扭转了局面......但至少我现在有一些新的选择要研究,谢谢你的消息@chris!
    • 好吧,即使使用双工绑定,连接也必须由客户端发起。如果反过来,事情会变得更加复杂,因为 client 必须监听套接字,打开防火墙上的端口等等。更不用说 NAT 穿越问题了。双工绑定是为了避免而创建的。
    【解决方案2】:

    您可以使用双工绑定来防止需要打开客户端上的端口。您的主机仍需要暴露给客户端以启动通信。您需要在一端打开一些东西,以便另一端可以调用它来启动进程

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-06
      • 2020-06-18
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多