通过慢速网络下载大型文件时出现StorageException

时间:2015-06-30 03:21:16

标签: c# exception azure azure-storage azure-storage-blobs

我正在使用NuGet包WindowsAzure.Storage版本4.2.1。

以下代码尝试从远程数据中心的存储容器中下载blob。

try
{
    var blobRequestOptions = new BlobRequestOptions
    {
        RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 3),
        MaximumExecutionTime = TimeSpan.FromMinutes(60),
        ServerTimeout = TimeSpan.FromMinutes(60)
    };
    using (var fileStream = File.Create(localPath))
    {
        blockBlob.DownloadToStream(fileStream, null, blobRequestOptions);
    }
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

然而,有时下载约10分钟然后它会抛出以下异常:

Unhandled Exception: Microsoft.WindowsAzure.Storage.StorageException: The client could not finish the operation within specified timeout. ---> System.TimeoutException: The client could not finish the operation within specified timeout.
--- End of inner exception stack trace ---
at Microsoft.WindowsAzure.Storage.Core.Util.StorageAsyncResult`1.End()
at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.EndUploadText(IAsyncResult asyncResult)
at Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass4.b__3(IAsyncResult ar)
--- End of stack trace from previous location where exception was thrown ---

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:7)

请尝试此代码。基本上它的作用是首先创建一个空文件,然后使用DownloadRangeToStream方法以1 MB块的形式读取blob的数据。随着块的下载,它会将其附加到文件中。

myApp.controller('LoginController', function($location) {
    // whatever code to process login and store user info
    $location.url('/home');
})

我在一个小文件上尝试过这个代码(差的互联网连接:P)。因此,在尝试使用500 MB文件之前,请先在一个小文件(比如大约5 - 10 MB)上尝试一下。 HTH。