【发布时间】:2016-03-03 12:08:51
【问题描述】:
使用 ASP.Net Web API,我正在开发一项服务,该服务(除其他外)从 Azure 检索数据,并将其返回给客户端。
这样做的一种方法是将 netire blob 读入缓冲区,然后将该缓冲区写入响应。但是,我宁愿流式传输内容,以获得更好的性能。
使用 Azure API 很简单:
CloudBlobContainer container = BlobClient.GetContainerReference(containerName);
CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
using (var buffer = new MemoryStream())
{
await blob.DownloadToStreamAsync(buffer);
}
在代码的其他地方,这会返回给客户端:
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StreamContent(buffer);
但是我可以确定在客户端完成读取之前 MemoryStream 不会被关闭/处置吗?
【问题讨论】:
-
要考虑的一种替代方法是将内容从 blob 直接下载到浏览器,并完全绕过您的 VM(减少 VM 负载)。我发布了一个关于 here 的答案。
标签: c# azure stream blob asp.net-web-api