C# WCF Net.tcp仅在本地失败
简短版本:我有一个自我托管的WCF服务,我无法让本地应用程序通过net.tcp与之通信 详细信息:我们的环境有几个自托管服务,它们都通过net.tcp相互通信。有问题的服务(A)公开了一个基于net.tcp的端点,该端点被其他框上的至少3个其他服务使用 我们最近在另一个服务(B)和(a)之间建立了一个新的连接。(B)和(A)都位于同一个框中。此连接拒绝工作,导致以下错误 套接字连接已中止。这可能是由于处理消息时出错、远程主机超过接收超时或基础网络资源问题造成的。本地套接字超时为“00:59:59.9688006” 内部异常: 远程主机已强制关闭现有连接 我毫不幸运地将绑定配置从(A)复制并粘贴到(B)中。我已经创建了一个能够复制此问题的测试应用程序。它在网络上的任何机器上工作,除了(A)的主机 只是为了好玩,服务(B)能够使用相同的绑定类型与服务(C)通信,服务(C)也位于与(A)相同的框中。我甚至将(C)中的绑定放到(A)中,测试应用程序和(B)中也看到了相同的行为 我已经检查并测试了我能找到的解决net.tcp连接问题的所有解决方案,但运气不佳 我与IT部门和我们的安全官员进行了核实,他们两人都无法从自己的角度考虑任何可能导致这种情况的因素 这是到(A)的第一个本地连接,到目前为止,所有其他连接都来自其他框 更新: 服务器绑定代码段C# WCF Net.tcp仅在本地失败,c#,.net,wcf,net.tcp,C#,.net,Wcf,Net.tcp,简短版本:我有一个自我托管的WCF服务,我无法让本地应用程序通过net.tcp与之通信 详细信息:我们的环境有几个自托管服务,它们都通过net.tcp相互通信。有问题的服务(A)公开了一个基于net.tcp的端点,该端点被其他框上的至少3个其他服务使用 我们最近在另一个服务(B)和(a)之间建立了一个新的连接。(B)和(A)都位于同一个框中。此连接拒绝工作,导致以下错误 套接字连接已中止。这可能是由于处理消息时出错、远程主机超过接收超时或基础网络资源问题造成的。本地套接字超时为“00:59:59
<netTcpBinding>
<binding name="TMSNetBinding"
closeTimeout="01:00:00"
openTimeout="00:00:20"
receiveTimeout="01:00:00"
sendTimeout="01:00:00"
maxBufferPoolSize="600000000"
maxBufferSize="30000000"
maxReceivedMessageSize="30000000"
maxConnections="100"
portSharingEnabled="false"
listenBacklog="100"
transferMode="Buffered"
hostNameComparisonMode="StrongWildcard">
<readerQuotas maxArrayLength="25000"
maxBytesPerRead="4096"
maxDepth="32"
maxNameTableCharCount="30000"
maxStringContentLength="300000" />
<security mode="None">
<transport clientCredentialType="Windows"
protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
<endpoint binding="netTcpBinding"
bindingConfiguration="TMSNetBinding"
contract="TMS.Internal.ITMSInternalOperations" />
在代码中,基本服务地址是“net”。tcp://localhost:888/TMS/“如前所述,还有另一台服务器(C)在非常类似的情况下工作。我花了很长时间比较了这两种服务,唯一的区别是两种服务的自托管实现方式不同。失败的服务有一个过度设计的抽象,我无法准确地确定是哪一部分混乱导致了问题。然而,剥离整个堆并用简单的自托管替换它解决了这个问题 如前所述,还有另一台服务器(C)在非常类似的情况下工作。我花了很长时间比较了这两种服务,唯一的区别是两种服务的自托管实现方式不同。失败的服务有一个过度设计的抽象,我无法准确地确定是哪一部分混乱导致了问题。然而,剥离整个堆并用简单的自托管替换它解决了这个问题 如何定义连接字符串?使用本地主机?还是机器名?这是一个可解析的名称。address=“net。tcp://TMS.dev.company.com:888/TMS“那么,您是否已验证此地址解析为给定计算机上的相同IP地址?您确定没有导致问题的主机文件条目吗?没有防火墙规则可能阻止来自同一台计算机的请求?实际上,WCF中没有任何东西可以阻止这一点,所以它一定是网络堆栈中的某个东西。。防火墙、dns、主机文件条目、路由表等等……是的,是的,是的。我甚至用localhost、127.0.0.1和机器名更新了客户端配置。所有的结果都是一样的,只是这样而已。如果您的服务绑定到特定的接口,那么它可能在127.0.0.1上不可用,因此如果您的所有测试都强制它这样做,那么这可能就是问题所在。您如何定义连接字符串?使用本地主机?还是机器名?这是一个可解析的名称。address=“net。tcp://TMS.dev.company.com:888/TMS“那么,您是否已验证此地址解析为给定计算机上的相同IP地址?您确定没有导致问题的主机文件条目吗?没有防火墙规则可能阻止来自同一台计算机的请求?实际上,WCF中没有任何东西可以阻止这一点,所以它一定是网络堆栈中的某个东西。。防火墙、dns、主机文件条目、路由表等等……是的,是的,是的。我甚至用localhost、127.0.0.1和机器名更新了客户端配置。所有的结果都是一样的,只是这样而已。如果您的服务绑定到一个特定的接口,那么它可能在127.0.0.1上不可用,因此如果您的所有测试都迫使它这样做,那么这可能就是问题所在。