我的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>
答案 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。
还尝试在服务上启用跟踪以查看更多错误详细信息。