SHOEISHA iD

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

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

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

japan.internet.com翻訳記事

Azure StorageとAzure SDKを使ってWindows Azureクラウドサービスアプリケーションを作成する

基本的な加算マシンをクラウドで構築し、アプリケーションの機能を理解する

Windows Azure Storage

 Windows Azure Storageには、TableBlobQueueという3種類のストレージがあります。Blobストレージは、構造化されていない大きなデータの塊を保存するためのものです。Queueストレージは、Web RoleとWorker Roleの間の一時的なメッセージ送受に使用するためのものです。Tableストレージは、構造化データを拡張可能な方法で保存するためのものです。以下の表に、これらのストレージの簡単な説明を示します。

※重要

 Tableストレージは、Azure SQLと同じではなく、リレーショナルデータベースモデルともまったく関係ありません。Tableストレージは、リレーショナルではありません。

Storage Service Primary Use
Table Structured data
Blob Unstructured data
Queue Passing messages between cloud service roles

 Azure Storageには、RESTインターフェースを介してアクセスします。従って、HTTPリクエストを発行できるならば、どこからでもアクセスできます。つまり、Tableストレージには、ADO.NET Data Servicesを用いてアクセスすることもできます。ありがたいことに、Azure Storageとのインターフェース用のマネージドコードラッパーが、Azure SDKの一部としてMicrosoftにより既に構築されています。July CTPの時点では、このプロジェクトは「StorageClient」という名前で、Azure SDKをインストールすると、C:\Program Files\Windows Azure SDK\v1.0\Samples\StorageClientに(全ソースが)格納されます。このプロジェクトを自分のCloud Serviceソリューションに直接追加するか、または、アセンブリをコンパイルしてそれをソリューション内で参照できます。StorageClientインターフェースは、本稿の例全体を通して、TableおよびQueueストレージを利用するために使用します。

Windows Azure Tableストレージを使用する

 開発環境のTableストレージは、Windows Azure Storageサービスのものとは少し異なります。相違点の1つは、開発環境のTableストレージでは、スキーマが固定でなければならないという点です。完全なAzure StorageサービスのTableストレージには、テーブル設定は必要なく、同一のテーブル内の多数のエンティティに、任意の数や種類のプロパティを追加できます。開発ストレージとWindows Azure Storageのすべての相違点については、http://msdn.microsoft.com/en-us/library/dd320275.aspxを参照ください。

 テーブルのデータにアクセスするためのテーブルスキーマとデータサービスコンテキストを作成するには、2つの別個のクラスを作成します。1つ目のクラスの名前を「Calculation.cs」、2つ目のクラスを「CalculationDataServiceContext.cs」とします。これら2つのクラスを作成したプロジェクトにおいて、System.Data.Services.Clientへの参照を追加します。2つのクラスに、それぞれ以下のコードを追加します(詳細についてはコード内のコメントを参照ください)。

Calculation.cs
public class Calculation : Microsoft.Samples.ServiceHosting.StorageClient.TableStorageEntity
{
    // Inheriting from TableStroageEntiry predefines the 3 necessary
    // properties for storing any entity in Table storage; PartitionKey,
    // RowKey and TimeStamp
    public Calculation()
    {
        // Hardcoded for this example but can be anything; best practice
        // is to assign the PartitionKey based on a value that groups
        // your data to optimize search performance.
        PartitionKey = "TEST";
        // Unique identifier with each partition
        RowKey = DateTime.Now.Ticks.ToString();
    }

    public int ValueOne { get; set; }
    public int ValueTwo { get; set; }
    public int CalcValue { get; set; }
}

CalculationDataServiceContext.cs
public class CalculationDataServiceContext : TableStorageDataServiceContext
{
    public CalculationDataServiceContext(StorageAccountInfo accountInfo)
        : base(accountInfo)
    { }

    // Properties that return IQueryable<T> are used by VS to create a
    // table in development storage named after the property.  The
    // schema is defined by the public properites in the model class.
    public IQueryable<CALCULATION> Calculations
    {
        get
        {
            return this.CreateQuery<CALCULATION>("Calculations");
        }
    }

    // Method to take two input values, input them into the table storage
    // and returns the RowKey so the value can be later retrieved.
    public string AddCalculation(int valueOne, int valueTwo)
    {
        Calculation calc = new Calculation();
        calc.ValueOne = valueOne;
        calc.ValueTwo = valueTwo;

        this.AddObject("Calculations", calc);
        this.SaveChanges();

        return calc.RowKey;
    }
}

 2つのクラスを正しく作成したら、次に、Visual Studioによってテストストレージテーブルを作成します。Solution Explorerで、MyCloudServiceプロジェクトを右クリックし、[Create Test Storage Tables]を選択します。処理が完了すると、Visual Studioはメッセージを表示します。ここで、アプリケーションをデバッグし、[Development Storage]管理ウィンドウを開くと、Tableサービスが起動していることが確認できます。

図1.5 テーブル作成後の開発ストレージ
図1.5 テーブル作成後の開発ストレージ

 次に、ファイル「Default.aspx.cs」にコードを追加して、新しいCalculationオブジェクトを作成し、Tableストレージに保存できるようにします。そのためには、Page_Loadメソッドと[start calculation]ボタンのクリックイベントハンドラにコードを追加します。

Default.aspx.cs(パート1)
using Microsoft.Samples.ServiceHosting.StorageClient;
using System.Data.Services.Client;

// ...

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        StorageAccountInfo accountInfo =
             StorageAccountInfo.GetAccountInfoFromConfiguration(
              "TableStorageEndpoint");

        // Not required in development since the table is created
        // manually but is needed in the cloud to create the tables
        // the first time.
        TableStorage.CreateTablesFromModel(
             typeof(CalculationDataServiceContext),
            accountInfo);
    }
    catch (DataServiceRequestException ex)
    {
        // Unable to connect to table storage. In development
        // verify the service is running.  In the cloud check that
        // the config values are correct.

        // Handle error
    }

}

protected void cmdStartCalculation_Click(object sender, EventArgs e)
{
    StorageAccountInfo accountTableInfo =
            StorageAccountInfo.GetDefaultTableStorageAccountFromConfiguration();

    CalculationDataServiceContext calculationDSContext =
            new CalculationDataServiceContext(accountTableInfo);

    lblCalculationKey.Text =
            calculationDSContext.AddCalculation(
                       int.Parse(txtValueOne.Text),
                       int.Parse(txtValueTwo.Text));
    lblCalculationKey.Visible = true;
}

 ここでアプリケーションを実行すると、2つの数値を入力し、それらをTableストレージに保存し、後で結果を取得するためのRowKeyを返すことができます。次のステップでは、2つの入力値を取得してそれらを加算するために、Queueストレージを介してWorker Roleにメッセージを送信します。

次のページ
Windows Azure Queueストレージを使用する

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

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

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

Matt Goebel(Matt Goebel)

インディアナ州インディアナポリスにあるAP Innovation, Incの創設者兼社長。同氏への連絡は、859-802-7591またはmatt.goebel@apinnovation.comまでどうぞ。

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4705 2010/01/08 14:00

イベント

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

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

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

メールバックナンバー