WCF Net.tcp仅在本地失败

时间:2017-05-16 20:12:22

标签: c# .net 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)的第一个本地连接,到目前为止所有其他连接都来自其他框。

更新: 服务器绑定代码段

<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 /”

1 个答案:

答案 0 :(得分:0)

如上所述,有另一台服务器(C)在非常相似的情况下工作。我花了很多时间来比较这两者,唯一的区别就是两个服务之间的自托管实现方式不同。失败的服务有一个过度设计的抽象,我无法准确地确定该混乱的哪个部分导致了问题。然而,撕掉整个堆并用简单的自托管替换它解决了这个问题。