WCF net.tcp通过互联网而不改变防火墙设置?

时间:2014-08-19 14:10:37

标签: c# wcf firewall nettcpbinding duplex

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

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

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台不同的计算机(在同一网络中)。

我的问题是:如何在2台不同的计算机上(通过互联网)完成这项工作,而无需在托管应用程序的计算机上将内容更改为防火墙?我是否需要更改为绑定到其他类型的绑定类型,如果是这样的话......到底是什么?我是否需要更改创建双工通道的方式或位置?还有什么吗?

2 个答案:

答案 0 :(得分:1)

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

解决这个问题的唯一方法是隧道通过VPN或某种代理服务,防火墙已经有一个开放端口。

答案 1 :(得分:0)

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