无法从本地网络中的另一台计算机使用NettcpBinding

时间:2014-03-17 19:46:50

标签: wcf windows-7 nettcpbinding

我在我的本地网络的一台机器上构建了一个WCF服务,它在IIS管理器中同时具有http和net.tcp(htpp,net.tcp)作为启用的协议。

从另一台计算机构建客户端应用程序,并使用“添加服务引用...”对话框自动定义端点,我键入服务地址,当它出现时,我设置名称并单击“确定”。 App.config使用两个端点进行更新,一个用于http(BasicHttpBinding),另一个用于net.tcp(NetTcpBinding),如预期的那样。

运行客户端应用程序时,如果我使用BasicHttpBinding:

“using(var proxy = new ProductsServiceClient(”BasicHttpBinding_IProductsService“))”

它运行正常,并显示预期的数据。

但是当我使用NetTcpBinding时:

“using(var proxy = new ProductsServiceClient(”NetTcpBinding_IProductsService“))”

抛出SecurityNegotiationException,说:

“在身份验证期间未满足远程安全要求。请尝试增加ProtectionLevel和/或ImpersonationLevel。”

如果我在同一台机器上完成所有工作,我不会有任何例外。

我该怎么办?

圣拉斐尔

2 个答案:

答案 0 :(得分:2)

默认情况下,BasicHttpBinding不支持安全性。因此,当从另一台计算机调用该服务时,它也可以工作。 但默认情况下,NetTcpBinding需要安全通道。默认安全模式是Transport,因此当从另一台计算机调用该服务时,它将引发安全性异常。

解决问题的最简单方法是将安全模式设置为无,如下所示:

<bindings>
    <netTcpBinding>
        <binding name="netTcpBindingConfiguration" >
            <security mode="None" />
    </binding>
</netTcpBinding>

然后我们在端点

中使用它
<endpoint address="net.tcp://nelson-laptop:8080/Whatever"
            binding="netTcpBinding"
            bindingConfiguration="netTcpBindingConfiguration"
            contract="ProductsService.IProductsService"
            name="NetTcpBinding_IProductsService" />

答案 1 :(得分:0)

在您的问题中,您使用的是默认的net.tcp端口 808 ,但已在防火墙中打开了端口 80 。如果它不是问题中的拼写错误,那可能就是它失败的原因。