我正在博客存储容器中存储一些大文件。
后来,使用 WebJob(也在 Azure 中),我使用
CloudBlockBlob.OpenRead()
读取每个 blob,这给了我一个 Stream
。
我打开流并从中读取。 问题是,当文件大于 25 MB 左右时,在读取正常一段时间后,它会抛出此异常(在读取期间):
未处理的异常:System.Net.Http.HttpRequestException:错误 将内容复制到流。 ---> System.ObjectDisposeException: 无法访问关闭的流。在 System.IO.__Error.StreamIsClosed() 在 System.IO.MemoryStream.get_Position() 处 System.Net.Http.StreamToStreamCopy.StartAsync()
对方好像关闭了文件!
为什么会出现这种情况?有超时吗?我该如何处理这种情况?
根据您的连接速度,您的响应可能会超时。这将支持您的说法,即它适用于about 25MB 的文件。使用
BlobRequestOptions增加
ServerTimeout
和/或 MaximumExecutionTime
来解决。
我已经使用这些选项调用了 OpenRead() 方法,看起来它不再超时!
return block.OpenRead(null, new BlobRequestOptions()
{
ServerTimeout = TimeSpan.MaxValue,
RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 4),
MaximumExecutionTime = TimeSpan.FromHours(3)
});