【问题标题】:C# - Missed file transfers with multiple FtpWebRequest using BackgroundWorkerC# - 使用 BackgroundWorker 与多个 FtpWebRequest 错过的文件传输
【发布时间】:2012-08-28 01:17:30
【问题描述】:

我有一堆文件要使用 C# 传输到单个 FTP 服务器,其中 FtpWebRequest 对象用 BackgroundWorker 包装。这是一对一的关系。因此,对于每个 FtpWebRequest,都有一个 BackgroundWorker 来完成这项工作。我解雇了其中几个 BackgroundWorker 以发送我想要的所有文件。

问题是它被击中或错过。有时所有文件都被传输,有时有些文件丢失。

目前我正在使用一种解决方法来检查文件是否存在于服务器上,如果不存在,我会尝试再次发送它。这行得通,但我觉得这是真正问题的绷带。

Stackoverflow...您认为这里有什么问题?

谢谢!

【问题讨论】:

  • 我通常不使用 BackgroundWorker,而是倾向于使用线程、任务或 ThreadPool,所以我不确切知道,但我的想法是,您是否尝试附加到 RunWorkerCompleted 事件并验证A)所有的工人都完成了,B)他们没有失败?您可能会遇到这样的情况,即 FTP 让它们全部快速运行并拒绝某些作为垃圾邮件节流技术,或者当您一次快速触发多个网络请求时可能会发生其他此类问题。我也不熟悉 FtpWebRequest,但是可以绑定多个请求以使用一个连接吗?
  • @JimmyHoffa 关于限制可能是正确的,或者您的请求在服务器发回“OK”状态之前进入,或者您试图打开比服务器允许的更多的套接字。我曾经有一个类似的问题,一个 PHP 脚本从服务器下载所有新文件,它甚至不是多线程的。您需要检查 FtpWebResponses 的 StatusCode 和 StatusDescription 属性——有许多不成功的条件不会抛出。
  • @JimmyHoffa,请将您的评论作为答案,以便我投票

标签: c# multithreading ftp backgroundworker ftpwebrequest


【解决方案1】:

我通常不使用 BackgroundWorker,而是倾向于使用 Threads、Tasks 或 ThreadPool,所以我不太清楚,但我的想法是,您是否尝试过附加到 RunWorkerCompleted 事件并验证 A) 所有工人完成和 B) 他们没有失败?您可能会遇到这样的情况,即 FTP 让它们全部快速运行并拒绝某些作为垃圾邮件节流技术,或者当您同时快速触发多个网络请求时可能会发生其他此类问题。我也不熟悉 FtpWebRequest,但是可以绑定多个请求以使用一个连接吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多