26

根据以下内容,关于尝试通过 HTTP 下载文件时为什么我可能会遇到大量“挂起”的任何想法?

  • 服务器是 IIS 6
  • 正在下载的文件是二进制文件,而不是网页
  • 几个客户端挂起,包括 TrueUpdate 和 FlexNet Web 更新包,以及仅执行基本 HttpWebRequest/HttpWebResponse 逻辑和使用响应流下载的自定义 .NET 应用程序
  • 成功时的 IIS 日志文件签名为 200 0 0 (sc-status sc-substatus sc-win32-status)
  • 对于失败,错误签名是 200 0 64
  • sc-win32-status of 64 是“指定的网络名不再可用”
  • 我可以将 firefox 指向 URL 并每次都成功下载(也许某些重试逻辑正在后台发生)

在这一点上,似乎我的服务器出现了一些奇怪的问题,它抛出了这些错误,或者这只是正常的网络行为,我需要使用(或编写)一个对故障更有弹性的客户端。

有什么想法吗?

4

7 回答 7

25

正如您在回复评论中推测的那样,您的问题可能是与 ISP 的低级别网络问题。我遇到了与 IIS 类似的问题,并且日志文件中出现了一些神秘的 200 0 64 行,这就是我找到这篇文章的方式。记录一下,这是我对 sc-win32-status=64; 的理解 如果我错了,我希望有人能纠正我。

  • sc-win32-status 64 表示“指定的网络名称不再可用。”</li>
  • 在 IIS 向客户端发送最终响应后,它会等待来自客户端的 ACK 消息。
  • 有时客户端会重置连接,而不是将最终的 ACK 发送回服务器。这不是一个正常的连接关闭,因此 IIS 记录“64”代码以指示中断。
  • 许多客户端在完成连接后会重置连接,以释放套接字而不是将其留在 TIME_WAIT/CLOSE_WAIT 中。
  • 代理人可能比个人客户更倾向于这样做。
于 2009-08-14T22:57:37.640 回答
8

我花了两周时间调查这个问题。对我来说,我遇到过间歇性随机请求被过早终止的情况。这导致 IIS 日志的状态代码为 200,但 win32 状态为 64。

我们的基础架构在 HA 模式下的两个 NetScaler 负载平衡器后面包括两个 Windows IIS 服务器。

在我的特殊情况下,问题在于 NetScaler 启用了一个名为“集成缓存”的功能(http://support.citrix.com/proddocs/topic/ns-optimization-10-5-map/ns-IC- gen-wrapper-10-con.html)。

禁用此功能后,请求中断停止。并且网站正常运行。我不确定这如何或为什么会导致问题,但确实如此。

如果您使用代理或负载均衡器,请调查一下它们打开了哪些功能。对我来说,原因是客户端和服务器之间中断了请求。

我希望这个解释至少可以节省别人的时间。

于 2015-06-22T23:15:26.677 回答
1

检查来自服务器的标头,尤其是内容类型和内容长度,您的客户端可能无法识别二进制文件的格式并在等待永远不会到来的字节时挂起,或者他们可能关闭底层 TCP 连接,这可能会导致 IIS 记录 win32 状态 64。

于 2009-05-06T23:10:47.420 回答
1

为此花了三天时间。超时设置为 4 秒(curl php 请求)。解决方案是增加超时设置:

//curl_setopt($ch, CURLOPT_TIMEOUT, 4); // times out after 4s
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // times out after 60s
于 2013-12-17T10:47:49.373 回答
0

您将不得不使用有线共享或网络监视器来收集有关此问题的更多数据。我想。

于 2008-12-16T20:25:13.380 回答
0

我建议您将Fiddler放在服务器和下载客户端之间。这应该揭示 Firefox 和其他 cient 之间的差异。

于 2008-12-17T14:56:47.303 回答
0

所有 sc-win32-status 代码的说明以供参考
https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-

ERROR_NETNAME_DELETED
64 (0x40)
指定的网络名称不再可用。

于 2022-02-01T23:05:42.457 回答