Timer_EntityBody、Timer_ConnectionIdle 和连接意外关闭

Timer_EntityBody、Timer_ConnectionIdle 和连接意外关闭

我们有一个 Windows 应用程序,它连接到 Web 服务(托管在 Windows 2008 Server IIS 7.5 上的 XML Web 服务,没有防病毒软件)并将一些数据提取到客户端。但有时(大约 5%-10% 的请求),尝试连接 Web 服务时会出现错误。

这是客户端应用程序错误日志;

Exception:System.Net.WebException: The underlying connection was closed: The connection was closed unexpectedly.
at System.Web.Services.Protocols.WebClientAsyncResult.WaitForResponse()
at System.Web.Services.Protocols.WebClientProtocol.EndSend(IAsyncResult asyncResult, Object& internalAsyncState, Stream& responseStream)
at System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)
at APPClient.APPFPService.WEBService.EndAddMoney(IAsyncResult asyncResult)
at APPClient.BLL.ServiceAgent.AddMoneyCallback(IAsyncResult ar)

另一方面,在 Web 服务器上,我检查了 HTTP 错误日志,看到一个这样的长文件;

2014-06-05 14:02:04 65.82.178.73 53798 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -
2014-06-05 14:07:24 76.109.81.223 58985 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -
2014-06-05 14:07:39 76.109.81.223 2803 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -
2014-06-05 14:08:59 76.109.81.223 52656 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -
2014-06-05 14:09:05 65.82.178.73 53904 SERVER.IP.ADDRESS 80 HTTP/1.1 POST /webservice/webservice.asmx - 2 Timer_EntityBody SYPService
2014-06-05 14:10:55 50.186.180.191 50648 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -

这里是类似的情况,但它对我没有帮助。

更新:当我检查 IIS 日志时,我发现一些类似这样的问题;

cs-method   cs-uri-stem                     sc-status   sc-win32-status     time-taken  cs-version
POST        /webservice/webservice.asmx     400         64                  46          HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  134675      HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  37549       HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  109         HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  31          HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  0           HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  15          HTTP/1.1

sc-win32-状态 64:指定的网络名称不再可用。

sc-状态 400: 错误的请求

另外,有些请求需要大约 130 秒,但有些请求不到 1 秒。这是一个连接到 Web 服务以处理一些数据的 Windows 应用程序。数据库上的查询没有一个需要大约 130 秒。

答案1

您正在查看 HTTPERR 日志,但它们可能不是全部内容。

这里有一个关于每个代码含义的参考:820729简而言之,上面唯一需要关注的点是 POST,因为耗时太长而被禁止(Timer_EntityBody - 即,在您的应用程序配置的 HTTPAPI 超时之前未收到实体主体)。

目前尚不清楚您是否在 IIS 中托管此应用程序,但我建议如果您收到这些错误,请在应用程序级别 (\inetpub\logs\w3svcxxx) 而不是系统级别 (\windows\system32\logfiles\httperr) 调查它们。

应用程序日志可能包含任何应用程序级别的错误、问题或中断,并且 EventVwr 中的应用程序事件日志中也可能有证据。

答案2

从 IIS 日志中。它显示无法访问 Web 服务或 Web 服务不可用“/webservice/webservice.asmx 400”。单独运行 Web 服务以确认 Web 服务是否在托管 Windows 服务的同一台服务器中启动并运行。如果 Windows 服务和 Web 服务位于不同的位置,这也可能是网络问题。

答案3

400 状态表示“错误请求”。所以这不是服务器端问题。请求有问题。在到达 IIS 之前格式不正确

如果子状态代码不是 0,则更容易排除故障。例如,如果它是 1,则表示“无效目标标头”。如果它是 2,则表示“无效深度标头”。以下是状态代码的完整列表

64 sc-win32-status 中存在与网络相关的问题。它指的是“指定的网络名称不再可用”。发送响应后,IIS 等待来自客户端的 ACK 包。如果客户端重置连接而不是发送此包,则 IIS 会记录 64 代码,因为这不是正常连接关闭。

Timer_EntityBody 错误意味着“请求实体主体到达之前连接已过期”。

建议

  • 检查服务器中是否有防病毒或网络端点保护等软件。卸载它们并监控系统一段时间,看看问题是否再次发生(注意:有时禁用它们并不意味着它们不再在后台运行。卸载是从故障排除过程中消除它们的最终方法)

  • 与第三方产品支持人员合作,查看是否有任何因素阻碍请求完全发送。应用程序可能正在启动连接但尚未完成

  • 请与网络团队联系,分析 Web 服务器和客户端之间的网络。理想情况下,网络跟踪会非常有用

来源:状态代码 400,sc-win32-status 列为 64

相关内容