SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

正式リリースされたWindows Azureの力

ブロブとテーブルを使用したWindows Azureストレージプログラミング

正式リリースされたWindows Azureの力(2)

[7]FileInfoEntityクラスの作成

 表5で定義したテーブルのエンティティを表すクラスを作成します。FileInfoEntityという名前で、TableServiceEntityの派生クラスとして作成します。

[リスト4]FileInfoEntityクラス(FileInfoEntity.cs)
using System;

using Microsoft.WindowsAzure.StorageClient;

namespace WebRole1
{
    public class FileInfoEntity : TableServiceEntity
    {
        public string Title { get; set; }
        public string OriginalFileName { get; set; }
        public string BlobUri { get; set; }
        public DateTime UploadedAt { get; set; }

        public FileInfoEntity(string userName, string blobName)
            : base(userName, blobName)    // *1
        { }

        public FileInfoEntity() : base() { }
    }
}

 TableServiceEntityクラスはテーブルのエンティティを表すクラスで、PartitionKey、RowKey、Timestampの3つのシステム予約プロパティへのサポートがなされています。このTableServiceEntityクラスを派生して、独自のプロパティを追加することにより、エンティティを定義することができます。ここでは、4つのプロパティを追加しています。

 コンストラクタで受け取る2つのパラメータは、PartitionKey(userName)とRowKey(blobName)を表しており、これを基底クラスであるTableServiceEntityクラスのコンストラクタに渡しています(*1)。

[8]参照設定に、System.Data.Services.Clientを追加する

 WebRole1の参照設定に、System.Data.Services.Clientを追加します。

 これは、Windows Azureストレージ・クライアントライブラリがテーブルの操作のために、ADO.NETデータサービス(ADO.NET Data Services)を使用するためです。

 ソリューションエクスプローラから、WebRole1プロジェクト内の参照設定フォルダを右クリックして、[参照の追加]を選択します。表示された「参照の追加」ダイアログ中の「.NET」タブ中より、System.Data.Services.Clientを選択し、[OK]ボタンをクリックします。

[9]Default.aspx.csにコードを記述する

 最後に、Default.aspx.csに、Windows Azureストレージにアクセスするコードを記述します。

Usingディレクティブとインスタンス変数

 次のリスト5の太字部分にあるように、3つのUsingディレクティブと2つのインスタンス変数を追加します。

[リスト5]Usingディレクティブとインスタンス変数(Default.aspx.cs)
using System;
using System.Linq;
using System.Web;

using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.StorageClient;

namespace WebRole1
{
    public partial class _Default : System.Web.UI.Page
    {
        private CloudBlobClient blobClient;         // ブロブクライアント
        private CloudTableClient tableClient;       // テーブルクライアント

        // 以下、省略
    }
}
Page_Loadイベントハンドラ

 Page_Loadメソッドにコードを記述します。

[リスト6]Page_Loadメソッド(Default.aspx.cs)
protected void Page_Load(object sender, EventArgs e)
{
    // ストレージアカウントの取得    *1
    string connectionString = RoleEnvironment.GetConfigurationSettingValue("DataConnectionString");
    var storageAccount = CloudStorageAccount.Parse(connectionString);

    // ブロブクライアントの作成        *2
    blobClient = storageAccount.CreateCloudBlobClient();

    // テーブルクライアントの作成    *3
    tableClient = storageAccount.CreateCloudTableClient();

    if (!IsPostBack)
    {
        // コンテナの作成(存在しなければ)        *4
        var blobContainer = blobClient.GetContainerReference("uploadedfiles");
        blobContainer.CreateIfNotExist();

        // コンテナの公開アクセスの許可レベルを、ブロブに設定する    *5
        var permissions = blobContainer.GetPermissions();
        permissions.PublicAccess = BlobContainerPublicAccessType.Blob;
        blobContainer.SetPermissions(permissions);

        // テーブルの作成(存在しなければ)        *6
        tableClient.CreateTableIfNotExist("uploadedfileinfo");

        Refresh();
    }
}

 まず、各ストレージのルートとなるストレージクライアントを取得します(*1)。次に、ブロブとテーブルの各ストレージを操作するクライアントを取得します(*2*3)。

 次に、「uploadedfiles」という名前でコンテナを作成します。既に存在していれば、何も処理は行われません(*4)。そして、作成したコンテナの公開アクセスの許可レベルを設定します。ここでは、登録されたブロブに誰でもアクセスできるように、ブロブレベル(BlobContainerPublicAccessType.Blob)に設定します(*5)。

 コンテナの公開アクセスの許可レベルを表す、BlobContainerPublicAccessType列挙体には、次の表6にあるように、3つのメンバが定義されています。

表6:コンテナの公開アクセスの許可レベル(BlobContainerPublicAccessType列挙体)
アクセスレベル 説明
Blob ブロブレベル公開アクセス。匿名ユーザーは、コンテナ内のブロブデータのみ読むことができる
Container コンテナレベル公開アクセス。匿名ユーザーは、コンテナとブロブデータを読むことができる
Off 未公開アクセス。ストレージアカウント所有者のみ、コンテナにアクセス可能

 次に、「uploadedfileinfo」という名前でテーブルを作成します。既に存在していれば、何も処理は行われません(*6

 なお、ページがロードされる度に、コンテナやテーブルの作成コードが毎回実行されるというのは、当然ですが設計上好ましくありません。これはあくまでサンプルとお考えください。

次のページ

この記事は参考になりましたか?

正式リリースされたWindows Azureの力連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 広瀬 嘉久(株式会社ジェイテックジャパン)(ヒロセ ヨシヒサ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5049 2010/04/23 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー