2

ダウンロードが何らかの理由で中断された場合に、外部ファイルのダウンロードを再開できる必要がある Silverlight 4 ブラウザー外アプリケーションがあります。ファイルがかなり大きくなり、ユーザーの接続が遅くなる可能性があるため、最初から再起動するのではなく、再開できるようにしたいと考えています。

私はいくつかのコードを見つけました、

http://www.codeproject.com/Tips/157532/Silverlight-4-OOB-HTTP-Download-Component-with-Pau.aspx

しかし、そこには多くのエラーがあるように見えるので、私はそれを機能させることができると確信していません.

ですから、他に独自の提案や代替案があれば、聞きたいです。

ありがとう、

4

1 に答える 1

4

検討する可能性のあるアプローチの1つは、HTTP/1.1Acccept-Ranges応答ヘッダーとRange要求ヘッダーを使用してダウンロードを管理することです。

ダウンロードするリソースにヘッダーが含まれていることを確認してください。-

Accept-Ranges:バイト

要求されたとき(IISによって送信された静的ファイルはデフォルトでこれを行います)。

ここで、ClientHTTPスタックを使用して、最初の「HEAD」リクエストを作成し、サーバーがRange: bytes=リクエスト内のヘッダーを受け入れるかどうかを判断し、送信するコンテンツの合計サイズを見つけます。

次に、ヘッダーを含むリソースに対して「GET」リクエストを行います。-

範囲:bytes = 0-65535

これにより、ダウンロードされるコンテンツは最初の64Kチャンクのみに制限されます。次に、次のコマンドで同じリクエストを繰り返します。-

範囲:bytes = 65536-131071

応答ストリームのコンテンツを宛先ファイルに保存できるたびに。受信したバイト数を追跡​​します。フルに満たない可能性が高い最終チャンクを決定するときは、次のようなヘッダーを使用してください。-

範囲:bytes = 131072-

それはファイルの終わりまで読みます。

サーバーへの要求が失敗した場合は、このシーケンスの適切な時点で再開できます。

サーバーが最初の「HEAD」リクエストにヘッダーを含めていない場合は、Accept-Rangesファイル全体をダウンロードするだけで済みます。

于 2011-03-12T22:09:58.737 に答える