为什么我们的Windows服务应用程序的TCP连接失败,并且#34;无法从传输连接中读取数据...由远程主机关闭。"?

时间:2015-01-06 03:30:37

标签: asp.net wcf sockets tcp tcpclient

我有一个基于WCF的Windows服务,它通过TCP连接从外部设备(比例)读取。 当服务最初启动时,与设备建立连接。 这是我们用来启动与设备连接的代码:

scaleData.Client = New TcpClient(ipAddress, (portNumber))
scaleData.Stream = scaleData.Client.GetStream()

该服务作为Windows服务托管(而不是通过IIS)。

我们有两个从WCF服务中提取数据的应用程序, 一个asp.net应用程序和一个winforms应用程序。

请求将数据从流返回给调用者/客户端。

Try
                    Dim bytes As Int32 = scaleData.Stream.Read(data, 0, data.Length)
                    responseData = Text.Encoding.ASCII.GetString(data, 0, bytes)c
 Catch ex As IOException
                    exceptionMsg = String.Format("IOEXCEPTION!!! :: {0}", ex.Message)
End Try

(winforms)测试应用程序,Web应用程序和Windows服务都位于同一台Windows 7计算机上。

在大多数情况下,此配置工作正常。但偶尔会失败。(我们无法确定其模式或具体情况),并带有以下消息

Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host

失败后,我们现在添加了重试逻辑以尝试重新建立TCP连接并从流中读取,但这似乎无法解决问题。我还启用了日志记录,捕获日志文件的异常。所有日志显示都是上面提到的消息。

有没有人对这里发生的事情有任何建议? 这是防火墙/端口/病毒扫描程序问题吗?

我们如何才能最好地进行?

正如我之前提到的,大部分服务都可以工作并从TCP连接中检索所需的结果。它似乎偶尔会失败,但最终会失败。

谢谢, JohnB

1 个答案:

答案 0 :(得分:0)

有一些可能的原因,尤其是在您运行大量交易时。

  1. 您可以达到WCF连接限制
  2. 您可以达到IIS连接限制
  3. 您的客户端可能已耗尽TCP端口
  4. 您可能将病毒扫描程序充当客户端计算机上的代理并中断连接
  5. 以下是一些可能有助于解决此问题的信息:

    始终从跟踪信息开始,以了解全局: WCF / ServiceModel http://msdn.microsoft.com/en-us/library/ms733025%28v=vs.110%29.aspx

    System.Net /网络跟踪 http://msdn.microsoft.com/en-us/library/ty48b824%28v=vs.110%29.aspx

    避免TCP / IP端口耗尽(BizTalk特定但仍适用) http://msdn.microsoft.com/en-us/library/aa560610%28v=bts.20%29.aspx

    大数据和流媒体 http://msdn.microsoft.com/en-us/library/ms733742%28v=vs.110%29.aspx

    connectionManagement http://msdn.microsoft.com/en-us/library/fb6y0fyc%28v=vs.110%29.aspx