normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Windows Azure ブロブが存在するか確認する

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」よりダウンロード&実行をオススメする。