【发布时间】:2017-05-26 11:12:28
【问题描述】:
我正在从 Azure blob 下载文件以将它们显示给我的用户。这些文件只是 doc/docx/pdf 格式的简历。这曾经工作到几天前,我唯一做的就是更新 Azure SDK,所以这可能是原因。 从客户端调用方法,最终调用这样的方法:
CloudBlobContainer container = GetContainer(containerName);
CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);
blockBlob.Properties.ContentType = contentType;
using (var fileStream = new MemoryStream())
{
await blockBlob.DownloadToStreamAsync(fileStream);
return fileStream;
}
GetContainer方法定义如下:
try
{
var storageAccount = StorageAccount;
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
if (container.CreateIfNotExists())
{
container.SetPermissions(new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
}
return container;
}
catch (Exception e)
{
Logger.Error("GetBlobContainer fail", e);
}
截至昨天,我一直在 Azure Application Insights 中看到失败的依赖项调用。不是错误,只是失败的依赖项。每次下载文件时,都会执行GET请求,但同时由于某种原因也执行了PUT请求,并且失败。 在下图中,您可以看到此错误的 Insights 日志。每一个看起来都一样。调用该方法,下载文件,然后调用该 PUT 请求...
为什么会创建这个 PUT 请求,以及如何解决这种行为,这让我抓狂。同样有趣的是,据我所知,一切正常,这发生在我对 blob 的所有上传和下载调用中。
【问题讨论】:
-
为什么要返回已处理的
fileStream?这不会造成问题吗?你用这个值做什么? -
我正在返回它并使用 ToArray() 方法从中读取字节数组。关闭/处理流后字节数组仍然可用 (stackoverflow.com/questions/3981253/…)
标签: c# azure dependencies azure-blob-storage