【问题标题】:WebClient and FtpWebRequest Both Hanging (Timeout)WebClient 和 FtpWebRequest 都挂起(超时)
【发布时间】:2013-02-04 17:29:50
【问题描述】:

我正在尝试从使用被动模式的 FTP 站点下载文件。我已经尝试过 FtpWebRequest 方法和 WebClient.DownloadFile 和 DownloadFileAsync 方法。

最近,我的代码如下所示:

using (var client = new WebClient())
{
    client.Proxy = new WebProxy();
    client.Credentials = credentials;
    client.DownloadFileCompleted += client_DownloadFileCompleted;
    client.DownloadFileAsync(new Uri(remotePath), localPath);
}

并被包装在方法 DownloadFile 中。在异步处理程序中,我得到下一项并(递归地)再次调用 DownloadFile 方法,依此类推,直到我到达最后一项。

几乎每一次,我使用的每一种方法,我都会通过 6 个文件和第 7 个错误。它只有一次通过列表中的所有文件,我无法再次复制它。文件数约为 100 个,文件大小约为 30 - 120k 个。奇怪的是,我经常会看到本地文件夹中的文件计数挂在第 7 项上,但是如果我让工作进程在后台运行,然后几分钟后回来并关闭 IIS express 或 VS Web 服务器,文件将显示。但是,它太不可预测了,不能按原样在生产中使用。

我也试过 CodePlex 上的 FTP LIB 库,也遇到了同样的问题。

他们那边似乎有什么东西正在关闭我的连接。

【问题讨论】:

  • 如果问题出在服务器上,你无能为力。
  • 有时最明显的答案是最好的。今天下午我尝试使用 Windows 资源管理器将文件复制下来,并且出现了一致的超时错误。我的想法是这根本与代码无关,但我可能必须更好地处理错误。

标签: c# webclient ftpwebrequest


【解决方案1】:

我也遇到过类似的问题。就我而言,我需要从 Linux 服务器上的许多文件夹中下载许多小文件。系统管理员建议我在每批之间延迟 3 秒。它大大减少了错误的数量。

【讨论】:

    猜你喜欢
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    相关资源
    最近更新 更多