【问题标题】:Exception with WebClient.DownloadFileAsyncWebClient.DownloadFileAsync 异常
【发布时间】:2011-04-14 04:30:01
【问题描述】:

我正在尝试通过以下方式在我的服务器上下载一个 zip 文件

WebClient.DownloadFileAsync(new Uri(DownloadLink),
                            Path.GetFileName(DownloadLink));

我有与下载完成和进度更改相关的事件,当下载达到 99% 时,它会停止。所以我给它一分钟,然后它给了我一个例外:

System.Net.WebException:在 WebClient 请求期间发生异常。 ---> System.IO.IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。 ---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭 在 System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult) --- 内部异常堆栈跟踪结束 --- 在 System.Net.ConnectStream.EndRead(IAsyncResult asyncResult) 在 System.Net.WebClient.DownloadBitsReadCallbackState(DownloadBitsState 状态,IAsyncResult 结果) --- 内部异常堆栈跟踪结束 ---

我被难住了。我可以在浏览器上正常下载文件。

【问题讨论】:

    标签: c# winforms exception webclient


    【解决方案1】:

    我无法直接回答您的问题,但我会尝试一些方法来确定是否能找出问题所在。

    首先,摆脱异步调用,直接调用DownloadFile。错误还会出现吗?

    调用DownloadData获取字节数组中的数据,然后保存文件。

    如果上述任何一个或两个都有效,那么我会说您的 DownloadDataCompleted 事件处理程序有问题,尽管我无法理解为什么会抛出 WebException

    哦,还有一件事:你确定Path.GetFileName(DownloadLink) 正在返回一个有效的文件名,并且你有在当前目录中写入文件的必要权限吗?

    【讨论】:

    • 同样的问题。是的,这是一个有效的名称。如果我查看该文件,则它已完全下载。另外,我的代码似乎不是问题。我有一些朋友尝试过,下载对他们有用。 |:
    • 两个问题:1)调用DownloadData获取字节数组中的文件也会抛出异常? 2) 您的朋友尝试运行您正在运行的相同代码,并且有效?
    • 是的,我现在在另一个网络上,它工作正常。
    【解决方案2】:

    如果 DownloadLink 返回类似 404 的错误,您将收到 WebException。在其中设置断点并检查进入方法的实际路径。

    编辑:如果 DownloadLink 是一个 url 字符串,请检查您是否正在转义“/”。试试@"..."

    【讨论】:

    • 不是 404,这将是一个不同的错误。就像我说的,它在技术上下载了 99% 的文件。
    • 这可能意味着服务器粗鲁地关闭了客户端上的连接。要进行验证,您可以获取 Wireshark 跟踪,也可以获取 system.net 跟踪日志 - 请参阅 ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html
    • 您能按照我的建议获取跟踪日志吗?这将显示就客户而言正在发生的事情。
    • 好的,我会尽快尝试并发布我的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多