【发布时间】:2015-07-21 23:59:06
【问题描述】:
以下代码:
WebClient client = new WebClient();
client.DownloadProgressChanged += DownloadProgressChanged;
client.DownloadFileCompleted += DownloadFileCompleted;
client.DownloadFileAsync(new Uri(downloadUrl), downloadPath);
在 .NET 4.5 中运行良好 - 它可以毫无问题地下载文件,但在 .NET 3.0 或 3.5 中它不起作用 - 文件显示为 0kb。
有人知道为什么会出现这种差异吗?我想知道 4.5 包含的 3.0 中是否缺少一些额外的标头?
它也不会抛出任何错误。
更新:
最终抛出“操作已超时”。例外。
更新 #2:
我从 HTTPS 更改为 HTTP,这似乎在我的特定情况下有效。实际上,我的 HTTP 调用将其重定向到 HTTPS。但是,使用 .NET 3.0 直接访问 HTTPS 对我不起作用。
【问题讨论】:
-
这两个事件都被触发了吗?如果是这样,会发生什么?
-
乔恩,没有任何事件触发(.NET 3.0)。轻微更新 - 我收到“操作已超时”。为了发生异常,我坚持了一段时间。
-
如果这是 HTTP,我建议您使用 Wireshark 来查看每种情况下发生的情况。
-
这是一个异步方法,所以它会在调用后立即退出。但是,这并不意味着它停止执行下载文件所需的操作。与 Jon Skeet 的问题一样,Progress Changed/File completed 会触发吗?我没有看到您处理任何可能发生的潜在错误。可能是文件无法再次下载(覆盖)或由于某种原因发生超时?
-
更新:抛出上述异常。奇怪的是,如果我将 .NET 版本从一个切换到另一个,它工作正常,反之亦然。我希望我不需要 Wireshark,但我刚刚下载了它,所以我会记录我的发现。