WCF tcp.net客户端/服务器连接失败“;“需要流安全性”;
我正在尝试测试一个简单的WCF tcp.net客户端/服务器应用程序。WCF服务托管在Windows 7 IIS上。我已在IIS中启用TCP.net。我通过配置具有管理员权限的应用程序池,并将IIS服务应用程序设置为在上下文中运行,从而授予服务应用程序自由的安全权限WCF tcp.net客户端/服务器连接失败“;“需要流安全性”;,wcf,connection,Wcf,Connection,我正在尝试测试一个简单的WCF tcp.net客户端/服务器应用程序。WCF服务托管在Windows 7 IIS上。我已在IIS中启用TCP.net。我通过配置具有管理员权限的应用程序池,并将IIS服务应用程序设置为在上下文中运行,从而授予服务应用程序自由的安全权限 <bindings> <netTcpBinding> <binding name="InsecureTcp"> <security mode="None" />
<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>
我在服务应用程序上启用了跟踪以进行故障排除。每当我从WCF客户端应用程序对服务运行一个简单的方法调用时,我都会遇到以下异常:
<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>
在需要流安全性,但未协商安全上下文。这可能是由于远程终结点在其绑定中缺少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>
以下是我的客户端配置:
<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>
<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>
以下是我的服务配置:
<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>
<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>
WCF不喜欢不安全的通信-它希望在默认情况下使用安全可靠的通信通道。
netTcpBinding
的默认安全模式是具有Windows凭据的传输级安全。你能使用默认值而不是关闭一切吗
<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>
如果您的服务器机器和所有调用它的客户端都在同一个公司局域网上,位于防火墙后面,那么不使用Windows凭据就没有意义了。为此,请使用此绑定配置:
<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>
<bindings>
<netTcpBinding>
<binding name="InsecureTcp">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
该安全功能非常快速,通常在网卡上的硬件中实现,在组织内部使用Windows凭据通常是最好的方法
<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>
那么,为什么您在
netTcpBinding
上禁用了所有安全性,并使自己陷入这种麻烦呢?Macr\u的答案适用于Windows 2008
<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>
请注意,当您在本地/开发Windows 7中尝试上述操作时,安全性问题将迎刃而解
<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>
请不要修改你的应用程序池,保留默认应用程序池,它正在工作WCF是一个程序,不是一个人,喜欢或不喜欢的东西。这是有误导性的,因为也可以为不安全的通信场景配置WCF。此外,您没有给出异常的原因。@DanielLeiszen:好的,WCF的设计者不喜欢不安全的通信-这对您来说足够“个人”了吗?WCF支持不安全的通信(),对于开发和测试目的来说是可以接受的方案,或者不需要任何安全性的通信。问题没有具体说明案件的具体情况,因此无法确定具体情况是否符合这些建议。然而,有关的例外和问题仍然没有得到回答。我真的对它的原因很感兴趣,因为我也经历了同样的错误。所以,如果你知道答案,请分享。
<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>