将WCF NetTcpBinding设置为仅接受本地连接时出错



我正在尝试设置一个WCF服务,该服务只接受来自自身的传入消息/连接。

我已经能够成功地创建服务并运行它,并使用此代码与它通信以创建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();

只要我添加这一行以限制来自localhost 的连接

binding.HostNameComparisonMode = HostNameComparisonMode.Exact;

我得到这个异常

System.ServiceModel.AddressAlreadyUserException:IP终结点0.0.0.0:19852上已经有侦听器。如果有另一个应用程序已经在侦听此终结点,或者您的服务主机中有多个具有相同IP终结点但绑定配置不兼容的服务终结点,则可能会发生这种情况。--->System.Net.Sockets.SocketException:每个套接字地址(协议/网络地址/端口)通常只允许使用一次

我甚至不确定我所做的是限制WCF访问的正确方法,但显然它不起作用。对我来说,这看起来像是与MEX端点的某种冲突。据我所知,我需要mex端点,所以我无法摆脱它。有人给我指明解决方案的方向吗?

实现这一点的简单方法是使用命名管道绑定。它只支持本地呼叫。从选择运输:

当需要在上的不同WCF应用程序之间进行通信时单个计算机,并且您希望阻止任何通信另一台机器,然后使用命名管道传输。

此外,墨西哥积分是完全可选的。您可以毫无问题地摆脱它的端点和行为。

最新更新