0

何千ものファイルをサーバーにアップロードしています。

サーバー接続が割り当てられて切断されるため、接続が数秒間失敗した場合などに、このコンソール アプリケーションが回復できるようにする方法が必要です。

私のアプリケーションは単純です。c:\uploads フォルダー内のすべてのファイルを取得し、Web サービスを使用してファイルをサーバーにアップロードするだけです。

それで:

foreach(ファイル内の文字列ファイル) { UploadToServer(ファイル); }

接続障害が発生した場合に回復するようにするにはどうすればよいですか? (通常、失敗はほんの数秒続きます)

4

2 に答える 2

1

タオルを投げる前にアップロードを数回再試行する小さなヘルパー メソッドを使用します。例えば:

static void UploadFile(string file) {
  for (int attempt = 0; ; ++attempt) {
    try {
      UploadToServer(file);
      return;
    }
    catch (SocketException ex) {
      if (attempt < 10 && (
          ex.SocketErrorCode == SocketError.ConnectionAborted ||
          ex.SocketErrorCode == SocketError.ConnectionReset ||
          ex.SocketErrorCode == SocketError.Disconnecting ||
          ex.SocketErrorCode == SocketError.HostDown)) {
        // Connection failed, retry
        System.Threading.Thread.Sleep(1000);
      }
      else throw;
    }
  }
}

必要に応じて例外処理コードを調整します。

于 2009-12-31T17:16:17.630 に答える
0

ファイルのアップロードに失敗した場合、スローされる例外はありますか? 存在する場合は、例外を処理し、それらのファイルを何らかのコンテナーに保存して後で再試行するか、ある種の Thread.Sleep を配置して少し待ってから再試行することができます。

于 2009-12-31T15:17:44.837 に答える