将WCF NetTcpBinding设置为只接受本地连接时出错
我试图设置一个WCF服务,它只接受来自其本身的传入消息/连接。将WCF NetTcpBinding设置为只接受本地连接时出错
我已经能够成功地创建服务,并运行它,并使用此代码来创建WCF端点与它通信(不仅限于本地主机)当我加入这一行
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
_host = new ServiceHost(this, new Uri("net.tcp://localhost:19852"));
_host.Description.Behaviors.Add(new ServiceMetadataBehavior());
_host.AddServiceEndpoint(typeof(ISyncClient), binding, "SyncService");
_host.AddServiceEndpoint(typeof(IMetadataExchange), System.ServiceModel.Description.MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
_host.Open();
限制连接从本地主机
binding.HostNameComparisonMode = HostNameComparisonMode.Exact;
我得到这个例外
System.ServiceModel.AddressAlreadyInUseException:已经有IP端点上的监听器0.0.0.0:19852。如果另一个应用程序已在此端点上侦听,或者您的服务主机中有多个具有相同IP端点但具有不兼容绑定配置的服务端点,则可能会发生这种情况。 ---> System.Net.Sockets.SocketException:通常只允许使用每个套接字地址(协议/网络地址/端口)
我甚至不确定我在做什么是限制WCF访问,但显然它不起作用。对我而言,这看起来像是与MEX端点的某种冲突。据我所知,我需要mex端点,所以我无法摆脱它。任何人都指向我的解决方案?
执行此操作的简单方法是使用命名管道绑定。它只支持本地通话。从Choosing a Transport:
当不同的WCF应用程序之间需要 台计算机上的沟通,并要防止 另一台机器上的任何信息,然后使用命名管道运输。
此外,Mex点是完全可选的。您可以毫无问题地摆脱其端点和行为。
当我试图使用WcfTestClient.exe测试服务时,没有mex端点就看不到它。 –
此外,使用命名管道绑定不是这个应用程序的选项(说我的领导) –
这是为什么?这正是它的目的。顺便说一句,WcfTestClient需要mex端点,因为它没有办法保存配置(不像你的应用程序)。 – stephenl
当你说“设置一个WCF服务只接受来自它自己的消息/连接”你是什么意思。我不确定我明白你为什么要这样做?当然,如果你想给自己发一条消息,你可以通过proc而不是通过WCF频道来完成。无论如何,您是否检查过该端口号是否已被其他服务使用? – stephenl
@stephenl我的意思是我希望服务只接受来自同一台机器的连接。 –