我有一个简单的 C# 系统托盘应用程序,用于System.Net.WebClient
下载多个文件,每个文件的范围为 3-15MB。WebClient 正在通过 HTTPS 下载,我控制从中进行下载的服务器。文件通过直接路径从 Web 浏览器下载得很好,并且 WebClient 完全能够处理.DownloadString()
来自该服务器的方法(即,将短文本文件下载到字符串)。
奇怪的是,在 24 小时内发生了三件事,我怀疑某种特定于机器的配置或缓存,但我想知道其他人可能知道WebClient
's 的内幕,这可能会让他们冒险猜测:
- 开发机器#1 在调试模式下运行此代码并下载文件(称为 MegabyteFile1 和 MegabyteFile2)直到星期五都没有问题。下载最多需要 3-5 秒。
- 突然,1 号开发机器在周五下午停止下载 MegabyteFile1。行为如下:
WebClient.DownloadFile()
无限期挂起- 文件 at
targetFileFullPath
已创建但有 0 个字节。 - 主线程无限期阻塞。
- 必须退出应用程序。
- 其他具有相同操作系统配置的开发机器可以正常运行代码并成功下载。
- 在 DevelopmentMachine1 上使用 Chrome 或 Internet Explorer 手动下载这些文件工作得很好,有和没有查询参数。
- 如果 Fiddler 正在运行, DevelopmentMachine1将下载该文件(即使没有安装 Fiddler HTTPS 证书冒名顶替者)。换句话说,如果我尝试嗅探这台机器上的电线,一切正常。
下载代码的相关部分内容如下:
using (WebClient client2 = new WebClient())
{
client2.DownloadFile(String.Format("{0}?{1}", thePath, queryParams), targetFileFullPath);
}
我已经在这个盒子上尝试了通常的系统管理员的东西:重新启动它,清除 Internet Explorer 缓存和临时目录等。
我知道我需要改变处理挂起下载的策略,因为我确信在现实世界中会有挂起的下载。但是,如果我不了解导致这种特定故障模式的原因,我不确定我会考虑所有极端情况。任何人都对发生的事情有足够的了解WebClient
来冒险猜测为什么这台机器是“特殊的”?
谢谢!-詹姆士