c# - 奇怪的 WebClient 行为 : 1 computer hangs, 其他人不对同一个文件

标签 c# .net webclient

我有一个简单的 C# 系统托盘应用程序,它使用 System.Net.WebClient 下载多个文件,每个文件的大小在 3-15MB 之间。 WebClient 通过 HTTPS 下载,我控制下载的服务器。这些文件通过直接路径从 Web 浏览器下载得很好,并且 WebClient 完全能够从该服务器处理 .DownloadString() 方法(即,将短文本文件下载到字符串)。

奇怪的是,24 小时内发生了三件事,我怀疑某种特定于机器的配置或缓存,但我想知道其他人可能知道哪些可能允许的 WebClient 内部结构他们冒险猜测:

  1. 1 号开发机在 Debug模式下运行这段代码并下载文件(称它们为 MegabyteFile1 和 MegabyteFile2)直到星期五都没有问题。下载最多需要 3-5 秒。
  2. 周五下午,开发机器 #1 突然停止下载 MegabyteFile1。行为如下:
    • WebClient.DownloadFile() 无限期挂起
    • targetFileFullPath 处的文件已创建,但有 0 个字节。
    • 主线程无限期阻塞。
    • 必须退出应用程序。
  3. 具有相同操作系统配置的其他开发机器运行代码并成功下载。
  4. 无论是否使用查询参数,在 DevelopmentMachine1 上使用 Chrome 或 Internet Explorer 手动下载这些文件都可以正常工作。
  5. DevelopmentMachine1 在 Fiddler 运行时下载该文件(即使没有安装 Fiddler HTTPS 证书冒名顶替程序)。换句话说,如果我尝试嗅探这台机器上的电线,一切正常。

下载代码的相关部分如下:

using (WebClient client2 = new WebClient())
{
  client2.DownloadFile(String.Format("{0}?{1}", thePath, queryParams), targetFileFullPath);
}

我已经在这个盒子上尝试了通常的系统管理员操作:重新启动它,清除 Internet Explorer 缓存和临时目录等。

我知道我需要改变我处理挂起下载的策略,因为我确信在现实世界中会有下载挂起。但是,如果我不了解导致这种特定故障模式的原因,我不确定我会想到所有极端情况。任何人都足够了解 WebClient 中发生的事情,可以冒险猜测为什么这台机器“特别”吗?

谢谢! -詹姆斯

最佳答案

遇到同样的问题,但找到了另一种解决方案。 这里的讨论相当复杂: http://social.msdn.microsoft.com/Forums/en-US/a00dba00-5432-450b-9904-9d343c11888d/webclient-downloadstringasync-freeze-my-ui?forum=ncl

简而言之,问题是 Web 客户端正在搜索代理服务器并挂起应用程序。 以下解决方案有帮助:

WebClient webClient = new WebClient();
webClient.Proxy = null;
... Do whatever else ...

关于c# - 奇怪的 WebClient 行为 : 1 computer hangs, 其他人不对同一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175456/

相关文章:

c# - 发出 Post 请求时为 WebClient 设置主体

c# - 从服务器下载文件(不下载?)

c# - 如何在从 ASP.Net 应用程序作为电子邮件发送的文本消息中包含换行符?

c# - 从解决方案中的另一个文件访问 Windows 形式的数组

c# - 发送电子邮件的 SMTP 错误?

c# - 不知道为什么我收到 InvalidCastException

c# - 打印总和为特定值的所有子集

c# - 相同的代码,C# 和 C++ 中的不同输出

.net - 在不使用 GAC 的情况下向 COM 注册托管程序集

Silverlight 4,子类化 WebClient