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 的文件。增加ServerTimeoutand/orMaximumExecutionTime使用BlobRequestOptions解决。

我已经使用这些选项调用了 OpenRead() 方法,它似乎不再超时!

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