如何解决TAzureBlobService->GetBlob 在大文件上失败
我正在使用 TAzureBlobService->GetBlob() 在 Azure 中打开文本文件。超过100M的文件失败;它在 30 秒后失败,并显示“与服务器的连接异常终止”。 文件很好,其他应用程序(在其他编译器中)很高兴。 GetBlob() 是否有大小或时间阈值?
3 月 13 日 ---
我已经发布了一个小表单应用程序(RAD Studio 10.2.3)来演示这里的问题 https://www.dropbox.com/s/lbywja0f6ss4o22/GetBlobTest.zip?dl=1 它包含带有三个测试文件(Test52M.txt、Test117M.txt、Test186M.txt)的测试存储帐户的密钥。 小的总是成功,中间的有时会失败,大的总是失败。 失败总是超过 30 秒,成功总是少于 30 秒。
代码只是建立了一个TAzureBlobService(zip里面的key),然后核心代码是:
// Create a MemoryStream for GetBlob to fill
if(MemoryStream) delete MemoryStream;
MemoryStream = new TMemoryStream();
try
{
zUPairList props,Metadata;
Service->GetBlob(CtnrName,bname,L"",false,props,Metadata,MemoryStream,CloudResponseInfo);
}
catch (Exception &exception)
{
Result = exception.Message;
return false;
}
Result = CloudResponseInfo->StatusMessage;
return true;
(zUPairList 是长系统pairlist 类的typedef)
中间的117M有时会失败,有时会成功,所以不是大小问题。 所有失败都超过 30 秒,所以它必须是某个时间限制。
解决方法
如果没有更多信息,听起来您的连接可能存在稳定性问题,因为您收到的是终止而不是返回的错误。您可以在此处查看 GetBlob 的超时规则:
https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob
Get Blob 操作允许在每 MiB 2 分钟内完成。如果操作平均每个 MiB 花费的时间超过 2 分钟,操作将超时。
,虽然底层 HTTP 连接设置了各种超时值,所有超时值均等于 60 秒(有关这些默认值之一的示例,请参阅 this documentation page),但重要的是 Azure 超时值的默认超时值是 30秒。
因此,您缺少的示例代码是这样的,其中 Service
是您的 TAzureService
引用:
Service->Timeout = 180;
有关详细信息,请参阅 the documentation。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。