複数のアップロードの防止
ファイルをアップロードすると、BITS は、BITS クライアントと BITS サーバーの両方へのアップロード セッションを識別するセッション ID を作成します。 BITS によるファイルのアップロード中に BITS クライアントとサーバー間の接続が切断された場合、クライアントはセッション ID を使用してアップロードを再開しようとします。
BITS クライアントが以前と同じサーバーに接続すると、サーバーはセッション ID を認識し、アップロードは中断された時点から再開されます。 ただし、クライアントが別のサーバーに接続する場合、新しいサーバーにはセッション コンテキストまたは以前にアップロードされたデータがないため、クライアントはアップロードを最初から開始する必要があります。 BITS サーバーが Web ファームでホストされていて、BITS IIS 拡張プロパティ BITSHostId が設定されていない場合、BITS は別のサーバーに接続する場合があります。 BITSHostId プロパティは、BITS クライアントが共有サーバー アドレスではなく、前のサーバーの一意のアドレスに接続するように強制することで、再起動を防ぎます。
BITS サーバーは、アップロード ファイルをサーバー アプリケーションに 1 回だけ送信しようとしますが、ファイルが複数回送信される可能性があります。 これは、たとえば、BITS サーバーがサーバー アプリケーションにファイルを送信し、サーバー アプリケーションからの応答を待機している間に終了した場合などに発生する可能性があります。 BITS クライアントは HTTP 層からエラー コードを受け取り、遅延後にアップロードを再試行します。 サーバーが BITSHostIdFallbackTimeout タイムアウトより長くオフラインのままである場合、クライアントは最終的に共有サーバー アドレスに要求を再度送信します。別の BITS サーバーがファイルを受信し、サーバー アプリケーションに再度配信します。
同様のケースは、1 つのフロントエンド サーバーでも発生する可能性があります。 たとえば、クライアントがファイル全体をサーバーにアップロードすると、最後のブロックによってサーバーはファイルをサーバー アプリケーションに転送します。 ファイルの処理後、確認応答がクライアントに送信される前に BITS サーバーまたはサーバー アプリケーションが終了すると、クライアントはエラー コードを受け取り、後で再試行します。 クライアントが再試行すると、BITS サーバーは最後のブロックがアップロードされたことを確認し、ファイルをサーバー アプリケーションに再度転送します。 アップロード ファイルを複数回受信することがサーバー アプリケーションにとって問題となる場合は、データにトランザクション ID を含めることを検討する必要があります。