2016-07-26 77 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) 
      });