C# WebClient和FtpWebRequest都挂起(超时)

C# WebClient和FtpWebRequest都挂起(超时),c#,webclient,ftpwebrequest,C#,Webclient,Ftpwebrequest,我正在尝试从使用被动模式的FTP站点下载文件。我尝试了FtpWebRequest方法和WebClient.DownloadFile和DownloadFileAsync方法 最近,我的代码看起来像: using (var client = new WebClient()) { client.Proxy = new WebProxy(); client.Credentials = credentials; client.DownloadFileCompleted += cli

我正在尝试从使用被动模式的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方法,依此类推,直到获取最后一项

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

我还尝试了CodePlex上的FTP LIB库,但遇到了相同的问题


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

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

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