【问题标题】:Azure BlobStorage stream is closed on files > 25 MBAzure BlobStorage 流在大于 25 MB 的文件上关闭
【发布时间】:2016-11-29 19:19:03
【问题描述】:

我将一些大文件存储在博客存储容器中。

后来,使用 WebJob(也在 Azure 中),我使用 CloudBlockBlob.OpenRead() 从每个 blob 中读取,这给了我一个 Stream

我打开流并从中读取。 问题是当文件大约大于 25 MB 时,在读取 OK 一段时间后,它会抛出此异常(在读取期间):

未处理的异常:System.Net.Http.HttpRequestException: Error while 将内容复制到流中。 ---> System.ObjectDisposedException: 无法访问已关闭的 Stream。在 System.IO.__Error.StreamIsClosed() 在 System.IO.MemoryStream.get_Position() 在 System.Net.Http.StreamToStreamCopy.StartAsync()

好像文件在另一边关闭了!

为什么会这样?有超时吗?我该如何处理这种情况?

【问题讨论】:

    标签: c# .net azure azure-blob-storage ziparchive


    【解决方案1】:

    根据您的连接速度,您的响应可能会超时。这将支持您的说法,即它适用于 25MB 的文件。增加ServerTimeout 和/或MaximumExecutionTime 使用BlobRequestOptions 来解决。

    【讨论】:

    • 问题是我不是在下载文件,而是使用 cloudBlobBlock.OpenRead() 从其中打开一个流。这是一个要求。
    • 你试过设置 BlobRequestOptions ServerTimeout 和 Maximum execution time 吗? msdn.microsoft.com/en-us/library/…
    • 有效!将 OpenRead 与这些选项一起使用: return block.OpenRead(null, new BlobRequestOptions() { ServerTimeout = TimeSpan.MaxValue, RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 4), MaximumExecutionTime = TimeSpan.FromHours(3) });
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 2013-02-22
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      相关资源
      最近更新 更多