0

我正在尝试设置一个只接受来自自身的传入消息/连接的 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();

一旦我添加此行以限制来自本地主机的连接

binding.HostNameComparisonMode = HostNameComparisonMode.Exact;

我得到了这个例外

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

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

4

1 回答 1

2

最简单的方法是使用命名管道绑定。它只支持本地呼叫。从选择交通工具

如果需要在单台计算机上的不同 WCF 应用程序之间进行通信,并且您希望阻止来自另一台计算机的任何通信,则使用命名管道传输。

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

于 2012-09-12T00:49:12.937 回答