Windows Azureの大御所Steve Marx氏が自身のブログで公開している「Testing Existence of a Windows Azure Blob」をちょいと試してみた。例によってサンプルアプリケーションも作成したので、試しに実行してみるのは如何だろうか。
概要について
「CloudBlobメソッドのMSDNサイト」を参照して頂くと明らかだが、Windows Azure ストレージ・ブロブ(CloudBlob)は存在を確認するためのメソッドが存在しない。そこで、Steve Marx氏が自身のブログで、CloudBlobの拡張メソッドとして「ブロブ存在確認用のメソッド」の作成方法を紹介している。
コードサンプルは以下となる。ブロブの属性を取得するAPIを呼び出し、「例外のエラーコード=リソースが存在しない」場合に「ブロブが存在しない」とみなしている。
/// <summary> /// Steve Marx氏のサンプルコード /// 以下のサイトを参照 /// http://blog.smarx.com/posts/testing-existence-of-a-windows-azure-blob /// </summary> public static class BlobExtensions { public static bool Exists(this CloudBlob blob) { try { blob.FetchAttributes(); return true; } catch (StorageClientException e) { if (e.ErrorCode == StorageErrorCode.ResourceNotFound) { return false; } else { throw; } } } }
何故この手法が良いかを述べるには、REST APIの内部処理と.NET StorageClientの対比について解説する必要がある。
REST APIであるGet Blob Propertiesを参照して頂ければ分かるが、HEADリクエスト(HTTPのヘッダー部のみ送付する)であるために電文量が非常に少ない。また、ブロブが存在しない場合は404エラーを返す。
.NET StorageClientライブラリのCloudBlob.FetchAttributes()メソッドが同REST APIには相当する。本メソッドを利用し、Steve Marx氏が公開したコードを記述することで、効率の良いブロブの存在確認メソッドを作成できる。
サンプルアプリケーション
ブロブに対する「生成」「削除」「存在確認」処理を実装した。こちら「Skydrive BlobExistCloudService.zip」よりダウンロード&実行をオススメする。