Azure Blob 存储流在超过 25MB 的文件上关闭
Azure BlobStorage stream is closed on files > 25 MB
我正在将一些大文件存储在博客存储容器中。
稍后,使用 WebJob(也在 Azure 中),我使用 CloudBlockBlob.OpenRead()
从每个 blob 中读取,这给了我 Stream
.
我打开流并从中读取。
问题是,当文件大于 25 MB aprox.,一段时间后读取 OK,它抛出这个异常(在读取期间):
Unhandled Exception: System.Net.Http.HttpRequestException: Error while
copying content to a stream. ---> System.ObjectDisposedException:
Cannot access a closed Stream. at System.IO.__Error.StreamIsClosed()
at System.IO.MemoryStream.get_Position() at
System.Net.Http.StreamToStreamCopy.StartAsync()
好像是对方关闭了文件!
为什么会这样?有超时吗?我该如何处理这种情况?
根据您的连接速度,您的响应可能会超时。这将支持您的声明,即它适用于 大约 25MB 的文件。增加ServerTimeout
and/orMaximumExecutionTime
使用BlobRequestOptions解决。
我已经使用这些选项调用了 OpenRead() 方法,它似乎不再超时!
return block.OpenRead(null, new BlobRequestOptions()
{
ServerTimeout = TimeSpan.MaxValue,
RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 4),
MaximumExecutionTime = TimeSpan.FromHours(3)
});
我正在将一些大文件存储在博客存储容器中。
稍后,使用 WebJob(也在 Azure 中),我使用 CloudBlockBlob.OpenRead()
从每个 blob 中读取,这给了我 Stream
.
我打开流并从中读取。 问题是,当文件大于 25 MB aprox.,一段时间后读取 OK,它抛出这个异常(在读取期间):
Unhandled Exception: System.Net.Http.HttpRequestException: Error while copying content to a stream. ---> System.ObjectDisposedException: Cannot access a closed Stream. at System.IO.__Error.StreamIsClosed() at System.IO.MemoryStream.get_Position() at System.Net.Http.StreamToStreamCopy.StartAsync()
好像是对方关闭了文件!
为什么会这样?有超时吗?我该如何处理这种情况?
根据您的连接速度,您的响应可能会超时。这将支持您的声明,即它适用于 大约 25MB 的文件。增加ServerTimeout
and/orMaximumExecutionTime
使用BlobRequestOptions解决。
我已经使用这些选项调用了 OpenRead() 方法,它似乎不再超时!
return block.OpenRead(null, new BlobRequestOptions()
{
ServerTimeout = TimeSpan.MaxValue,
RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 4),
MaximumExecutionTime = TimeSpan.FromHours(3)
});