IIS文件下载挂起/超时 - sc-win32-status = 64

时间:2008-12-16 18:06:10

标签: http iis download

根据以下内容,在尝试通过HTTP下载文件时,为什么我可能会出现大量“挂起”的想法?

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

此时,我的服务器似乎有一些时髦的东西,它正在抛出这些错误,或者这只是正常的网络行为,我需要使用(或写入)对故障更具弹性的客户端。

有什么想法吗?

6 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:4)

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

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

在我的特定情况下,问题是NetScaler有一个名为" Intergrated Caching"打开(http://support.citrix.com/proddocs/topic/ns-optimization-10-5-map/ns-IC-gen-wrapper-10-con.html)。

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

如果您使用代理或负载均衡器,请对其已启用的功能进行一些调查。对我来说,原因是客户端和服务器之间的中断请求。

我希望这种解释至少会节省别人的时间。

答案 2 :(得分:1)

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

//curl_setopt($ch, CURLOPT_TIMEOUT, 4); // times out after 4s
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // times out after 60s

答案 3 :(得分:0)

您必须使用wirehare或网络监视器来收集有关此问题的更多数据。我想。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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