11

数時間、AzureSDKを使用して作成したBLOBにメタデータを設定しようとしています。を使用して非同期でデータをアップロードするBeginUploadFromStream()と、すべてがスムーズに機能します。アップロードが完了したときにURIを使用してblobにアクセスできるため、blobは正常に作成されますが、設定したメタデータは保持されません

を呼び出したにメタデータを設定しましたEndUploadFromStream()

ドキュメントから見つけることができる3つの方法でメタデータを設定してみました:

// First attempt
myBlob.Metadata["foo"] = "bar";

// Second attempt
myBlob.Metadata.Add("foo", "bar");

//Third attempt
var metadata = new NameValueCollection();
metadata["foo"] = "bar";
blob.Metadata.Add(metadata);

メタデータを設定した後、ドキュメントで指定されているように、メタデータをAzureに保存するために呼び出しmyBlob.SetMetadata()ますが、固定されません。呼び出しは例外をスローしませんが、blobへの新しい参照を取得すると、メタデータがありません

BeginSetMetadata()を使用してメタデータを非同期で保存しようとしましEndSetMetadata()たが、同様の結果が得られました。

私はここで本当に些細なことを見逃していると思い始めますが、それを5時間見つめた後でも、どこが間違っているのか理解できませんか?

4

2 に答える 2

22

SetMetadata は期待どおりに動作するはずです。ただし、BLOB への参照を取得するだけでは、メタデータを読み取るのに十分ではありません。

BLOB 参照を取得したら、その CloudBlob でFetchAttributesメソッドを呼び出す必要があります。これにより、すべてのプロパティとメタデータが読み込まれ、以前に設定したメタデータにアクセスできるようになります。

// Get a reference to a blob.
CloudBlob blob = blobClient.GetBlobReference("mycontainer/myblob.txt");

// Populate the blob's attributes.
blob.FetchAttributes();

// Enumerate the blob's metadata.
foreach (var metadataKey in blob.Metadata.Keys)
{
    Console.WriteLine("Metadata name: " + metadataKey.ToString());
    Console.WriteLine("Metadata value: " + blob.Metadata.Get(metadataKey.ToString()));
}
于 2012-10-23T13:23:06.877 に答える