WCF服务,安全模式为none

时间:2013-09-04 19:54:17

标签: wcf wcf-security

我的WCF服务可以正常使用安全模式=“传输”和clientCredentialType =“Windows”(在一台或两台计算机上使用客户端和服务)。但我需要将服务放在防火墙的另一端,在那里无法进行Windows身份验证。我知道我可以安装X.509证书或使用security =“None”(我将添加自己的安全协议)。但我不能让“无”工作!我一直得到'套接字连接中止'错误。

这是配置,如果您发现任何问题,请告诉我。我已经尝试过没有指定clientCredentialType =“none”的2行,但它没有做出差异。附:每次我进行配置更改时,我都会停止并重新启动客户端和服务。

SERVER CONFIG

<system.serviceModel>  
<services>  
  <service name="OuterService.OutCardTrx">  
      <endpoint address="" binding="netTcpBinding" contract="OuterService.IOutCardTrx">  
          <identity>  
          <dns value="localhost"/>  
          </identity>  
      </endpoint>  
      <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
      <host>  
        <baseAddresses>  
          <add baseAddress="net.tcp://jimt4.campus.internal:8081/PCIOutService"/>  
        </baseAddresses>  
        </host>
  </service>
</services>
<bindings>
  <netTcpBinding>
    <binding name="netTcpBinding">
      <security mode="None" >
        <transport clientCredentialType="None" />
        <message clientCredentialType="None" />
      </security>
    </binding>
  </netTcpBinding> 
</bindings>

客户端配置:

<system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_IOutCardTrx" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
          hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
          maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
              enabled="false" />
          <security mode="None">
              <transport clientCredentialType="None" />
              <message clientCredentialType="None" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
        <endpoint address="net.tcp://jimt4.campus.internal:8081/" binding="netTcpBinding"
           bindingConfiguration="NetTcpBinding_IOutCardTrx" contract="OCS.IOutCardTrx"
           name="NetTcpBinding_IOutCardTrx">
           <identity>
              <dns value="localhost" />
           </identity>
         </endpoint>
     </client>
    </system.serviceModel>

2 个答案:

答案 0 :(得分:4)

不是100%确定这是原因,但您的绑定安全设置在客户端和服务之间不匹配。

请注意,NetTcpBinding的默认安全性为Transport(对于模式)。您在服务配置中的绑定中定义None,但该绑定从未分配给服务端点,因此您的服务使用NetTcp的默认设置。

另一方面,您正在设置客户端上的绑定配置。

尝试在服务端点中设置绑定配置,如下所示:

<endpoint address="" binding="netTcpBinding" 
          bindingConfiguration="netTcpBinding"
          contract="OuterService.IOutCardTrx"> 

这会将指定的绑定分配给端点,安全性设置为“None”。我还建议将绑定配置名称更改为“netTcpBinding”以外的名称,以避免任何可能的混淆。

答案 1 :(得分:0)

您是否尝试在客户端/服务器配置中增加MaxItemsInObjectGraph,MaxReceivedMessageSize,MaxBufferPoolSize,MaxBufferSize,MaxArrayLength的值?默认值非常低,尝试将它们最大化为2147483647。

还尝试在服务上启用跟踪以查看更多错误详细信息。