【发布时间】:2019-07-10 03:02:18
【问题描述】:
我喜欢将一些元数据写入现有的 blob。该函数运行没有任何错误,但 blob 元数据未更改或未创建。
#r "Microsoft.WindowsAzure.Storage"
using System; using System.Configuration; using System.Net; using
System.Text; using Microsoft.Azure; using
Microsoft.WindowsAzure.Storage; using
Microsoft.WindowsAzure.Storage.Blob;
public static void Run(string myQueueItem, ILogger log) {
string[] myQueueItems = myQueueItem.Split(':');
string DocumentID = myQueueItems[0];
string MetaDataKey = myQueueItems[1];
string MetaDataValue = myQueueItems[2];
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("test123");
CloudBlob blob = container.GetBlobReference("teams.xlsx");
blob.FetchAttributesAsync();
if (blob.Metadata.ContainsKey(MetaDataKey))
{
blob.Metadata[MetaDataKey] = MetaDataValue;
}
else{
blob.Metadata.Add(MetaDataKey, MetaDataValue);
}
blob.SetMetadataAsync();
log.LogInformation($"C# Queue trigger function processed: {blob.Name}");
}
输入:测试:测试:测试 输出:C# 队列触发函数已处理:teams.xlsx
函数运行但未在 blob teams.xlsx 上创建值为“Test”的元数据“Test”。
问候 斯蒂芬
【问题讨论】:
-
我不熟悉这个操作,但假设
SetMetadataAsync()是真正的async,你正在做一个即发即弃的调用,因为你没有await它。可能是请求在操作完成之前结束,导致您的问题。这是一种可怕的做法,但只是为了看看会发生什么,直到你可以正确实施,看看如果你把它改成blob.SetMetadataAsync().Result;会发生什么 -
谢谢,但是。结果将不起作用。我将重建代码,以便可以使用 await。当我将代码粘贴到控制台应用程序中时,结果将相同。
标签: c# azure-functions azure-blob-storage