2012-10-23 13 views
8

私はAzure SDKを使用して作成したBLOBに数時間メタデータを設定しようとしていました。 BeginUploadFromStream()を使用してデータを非同期にアップロードすると、すべてがスムーズに機能します。アップロードが完了すると、そのURIを使用してBLOBにアクセスできるので、正常に作成されます。設定したメタデータはすべて永続化されませんCloudBlob.SetMetadataを呼び出してもBlobメタデータは保存されません

の後にを設定しました。EndUploadFromStream()を呼び出しました。

私は、メタデータを設定し、私はdocumentationを通じて見つけることができる3つの方法試してみた:私は、ドキュメントで指定され、アズールにメタデータを保存するためにmyBlob.SetMetadata()を呼び出して、メタデータを設定した後

// 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); 

を、それ固執しない。 の呼び出しでは例外は発生しません、しかし、私のBLOBへの新しい参照を取得すると、にはメタデータがありません。

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

私はここで何か本当に些細なものがないと思っていますが、それを5時間スタンドした後、私はどこが間違っているのかまだ分かりません。

答えて

20

期待どおりに動作するはずです。しかし、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())); 
} 
+0

私は本当に些細なことだと思っていました。私は、執筆が問題であるという考えに集中しすぎていたと思う - 問題がそのプロパティを読むかもしれないと考えていない。ありがとう、たくさんの時間を節約しました! –

関連する問題