5

Silverlightで非常に大きなファイル(> 2GB)をダウンロードするときに、問題が発生していました。私のアプリケーションは、昇格されたアクセス許可で実行されているブラウザー外のダウンロードマネージャーです。

ファイルが特定のデータ量(2GB)に達すると、次の例外がスローされます。

System.ArgumentOutOfRangeException was caught
  Message=Specified argument was out of the range of valid values.
Parameter name: count
  StackTrace:
   in MS.Internal.InternalNetworkStream.BeginRead(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state)
   in MS.Internal.InternalNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   in MySolution.DM.Download.BeginResponseCallback(IAsyncResult ar)
  InnerException: 
Null

私が持っている唯一の手がかりは、実装を示すこのサイトです。この例外は、が0未満BeginCodeの場合にのみ発生します。count

私のコード

/* "Target" is a File object. "source" is a Stream object */

var buffer = new byte[64 * 1024];
int bytesRead;
Target.Seek(0, SeekOrigin.End); // The file might exists when resuming a download

/* The exception throws from inside "source.Read" */
while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
{
    Target.Write(buffer, 0, bytesRead);
    _fileBytes = Target.Length;
    Deployment.Current.Dispatcher.BeginInvoke(() => { DownloadPercentual = Double.Parse(Math.Round((decimal)(_fileBytes / (_totalSize / 100)), 5).ToString()); });
}

Target.Close();
logFile.Close();

エラーはさまざまな種類のファイルで発生し、AmazonS3のパブリックバケットから発生します。(通常のhttpリクエストを使用)。

4

1 に答える 1

1

少し検索しましたが、これはSilverlightの既知の制限のようです。考えられる回避策の1つは、Rangeヘッダーを使用して、それぞれ2GB未満の複数のセクションでダウンロードを実行することです。

于 2012-08-24T19:15:21.733 に答える