Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将WCF NetTcpBinding设置为仅接受本地连接时出错_C#_Wcf_Nettcpbinding_Mex Bindings - Fatal编程技术网

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

C# 将WCF NetTcpBinding设置为仅接受本地连接时出错,c#,wcf,nettcpbinding,mex-bindings,C#,Wcf,Nettcpbinding,Mex Bindings,我正在尝试设置一个WCF服务,它只接受来自自身的传入消息/连接 我已经能够成功地创建服务并运行它,并使用此代码与它通信以创建WCF端点(不限于localhost) 只要我添加这一行以限制来自本地主机的连接 binding.HostNameComparisonMode = HostNameComparisonMode.Exact; 我得到这个例外 System.ServiceModel.AddressalReadyUseException:IP端点0.0.0.0:19852上已存在侦听器。如果有

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

我已经能够成功地创建服务并运行它,并使用此代码与它通信以创建WCF端点(不限于localhost)

只要我添加这一行以限制来自本地主机的连接

binding.HostNameComparisonMode = HostNameComparisonMode.Exact;
我得到这个例外

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


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

简单的方法是使用命名管道绑定。它只支持本地呼叫。发件人:

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


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

当您说“设置一个只接受来自自身的传入消息/连接的WCF服务”是什么意思。我不太明白你为什么要这么做?当然,如果你想给自己发送消息,你会在proc中发送,而不是通过WCF通道。无论如何,您是否检查过该端口号是否已被其他服务使用?@stephenl我的意思是,我希望该服务仅接受来自同一台计算机的连接。当我尝试使用WcfTestClient.exe测试该服务时,如果没有mex端点,该端口号将不可见。此外,使用命名管道绑定不是此应用程序的选项(我的负责人说),为什么?这正是它的目的。顺便说一句,WcfTestClient需要mex端点,因为它无法保存配置(与应用程序不同)。@Malcom-只接受本地调用是安全要求吗?出于安全目的依赖TCP消息信息是不明智的,而且可能容易受到欺骗(但我不是安全专家)。如果您不能使用管道并且必须使用TCP,我建议您考虑使用特定于用例的凭据或声明来调用服务。
binding.HostNameComparisonMode = HostNameComparisonMode.Exact;