2016-07-26 78 views
0

我正在將一些大文件存儲在博客存儲容器中。Azure BlobStorage流關閉文件> 25 MB

後來,使用WebJob(也在Azure中),我使用CloudBlockBlob.OpenRead()從這些blob中讀取了這些數據,這給我一個Stream

我打開流並從中讀取。 的問題是,當文件超過25 MB aprox的大,看些書確定之後,引發此異常(在讀):

未處理的異常:System.Net.Http.HttpRequestException:錯誤而 將內容複製到流中。 ---> System.ObjectDisposedException: 無法訪問關閉的流。在System.IO .__ Error.StreamIsClosed() 在System.IO.MemoryStream.get_Position()在 System.Net.Http.StreamToStreamCopy.StartAsync()

看來,該文件是在對方禁區側!

爲什麼會發生這種情況?有沒有超時?我該如何處理這種情況?

回答

1

根據您的連接速度,您的響應可能會超時。這將支持您的聲明,它是關於關於 25MB的文件。使用BlobRequestOptions來增加ServerTimeout和/或MaximumExecutionTime來解決。

+0

問題是我沒有下載文件,而是使用cloudBlobBlock.OpenRead()從它打開流。這是一個要求。 – SuperJMN

+1

您是否嘗試過設置BlobRequestOptions ServerTimeout和最大執行時間? https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.blobrequestoptions_members(v=azure.10).aspx –

+0

請發佈您正在使用的代碼。 –

0

我用這些選項調用了OpenRead()方法,它似乎不再超時了!

return block.OpenRead(null, new BlobRequestOptions() 
      { 
       ServerTimeout = TimeSpan.MaxValue, 
       RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 4),     
       MaximumExecutionTime = TimeSpan.FromHours(3) 
      });