我有一个客户端和一个主机应用程序。客户端可以发送消息并获取回调消息。
我使用此代码在客户端创建双工通道:
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台不同的计算机上(通过互联网)完成这项工作,而无需在托管应用程序的计算机上将内容更改为防火墙?我是否需要更改为绑定到其他类型的绑定类型,如果是这样的话......到底是什么?我是否需要更改创建双工通道的方式或位置?还有什么吗?
答案 0 :(得分:1)
无论您使用哪种绑定,双工与否,甚至是否甚至托管WCF服务或侦听TCP或UDP套接字的任何其他类型的应用程序:总是必须确保主机的防火墙接受服务侦听的端口上的传入连接。默认情况下,任何理智的防火墙配置都会阻止传入连接。
解决这个问题的唯一方法是隧道通过VPN或某种代理服务,防火墙已经有一个开放端口。
答案 1 :(得分:0)
您可以使用双工绑定来防止需要在CLIENT上打开端口。您的主机仍需要公开,以便客户端启动通信。你需要在一端打开一些东西,以便另一端可以调用它来启动过程