WCF tcp.net客户端/服务器连接失败“需要Stream Security”

时间:2010-05-17 00:46:41

标签: wcf connection

我正在尝试测试一个简单的WCF tcp.net客户端/服务器应用程序。 WCF服务托管在Windows 7 IIS上。我在IIS中启用了TCP.net。我通过配置具有管理员权限的应用程序池并将IIS服务应用程序设置为在上下文中运行,授予自由安全权限以服务应用程序。

我在服务应用上启用了跟踪功能以进行故障排除。每当我从WCF客户端应用程序运行针对服务的简单方法调用时,我都会遇到以下异常:

http://www.w3.org/2005/08/addressing/anonymous需要”流安全性“,但未协商安全上下文。这可能是由远程端点从其绑定中丢失StreamSecurityBindingElement引起的。”

这是我的客户端配置:                    

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

这是我的服务配置:           

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

<services>
  <service name="OrderService" behaviorConfiguration="debugServiceBehavior">
    <endpoint
        address=""
        binding="netTcpBinding"
        bindingConfiguration="InsecureTcp"
        contract="ProtoBufWcfService.IOrder" />
  </service>
</services>

<behaviors>

  <serviceBehaviors>
    <behavior name="debugServiceBehavior">
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>

  </serviceBehaviors>
</behaviors>

         

2 个答案:

答案 0 :(得分:2)

WCF不喜欢不安全的通信 - 它默认使用安全可靠的通信通道。 netTcpBinding的默认安全模式是具有Windows凭据的传输级安全性。你可以使用该默认值而不是关闭所有内容吗?

如果您的服务器计算机和所有调用它的客户端位于同一公司LAN上,在防火墙后面,那么不使用Windows凭据就没有意义了。为此,请使用此绑定配置:

<bindings>
  <netTcpBinding>
    <binding name="InsecureTcp">
      <security mode="Transport">
         <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </netTcpBinding>
</bindings>

该安全功能非常快,通常在网卡上的硬件中实现,并且在组织内部使用Windows凭据通常是最佳方式。

那么为什么要禁用netTcpBinding上的所有安全性并让自己陷入麻烦?

答案 1 :(得分:0)

Macr_s回答适用于Windows 2008。

请注意,当您在本地/开发Windows 7中尝试上述操作时,事情将无需安全保护。

请不要修改您的APP池,保留默认的应用程序池,它正在运行