SHOEISHA iD

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

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

Windows Azureで作成するアプリケーションの基礎

Windows Azureクラウドサービス運用の実際

Windows Azureで作成するアプリケーションの基礎(2)

  • X ポスト
  • このエントリーをはてなブックマークに追加

Visual Studio 2008を使ったアプリケーションの作成

 では、早速アプリケーションを実装していきましょう。まず、Visual Studio 2008で新しいプロジェクトを作成します。メニューバーで[ファイル]-[新しいプロジェクト]を選択しましょう。[プロジェクトの種類]を[C#]-[Cloud Service]、[テンプレート]を[Web Cloud Service]にします。プロジェクト名/場所/ソリューション名を指定し、[ソリューションのディレクトリを作成]にチェックが入っていることを確認の上、[OK]をクリックしてください。サンプルではプロジェクト名を「CloudService1」としました。

 続いて、各ファイルの編集に移ります。最初に編集するのはクラウドサービスの構成を定義する「ServiceDefintion.csdef」ファイルです。ローカルストレージを利用する際には、この定義ファイルに設定の追加が必要です。

 ソリューションエクスプローラで、「CloudService1」プロジェクト以下にある「ServiceDefintion.csdef」ファイルを選択し、ダブルクリックしましょう。定義ファイルはXML形式で記述します。

 デフォルト状態で基本的な構成は記述されています。ファイル内のWebRole要素が本サンプルのWebロールの構成を表します。このWebロール内でローカルストレージを利用するためWebRole要素の直下に定義を追記します。

 次のように記述してください。

[リスト1]定義ファイルの編集
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="CloudService1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRole">
      <LocalStorage name="CloudService1Storage"/>
      <InputEndpoints>
      <!-- Must use port 80 for http and port 443 for https when running in the cloud -->
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
    </InputEndpoints>
  </WebRole>
</ServiceDefinition>

 追記したLocalStorage要素は、ローカルストレージを利用することを指定するための要素で、name属性でストレージの名称を指定します。実際にWebロールからローカルストレージを利用する際にはここで指定した名称を使ってアクセスします。

 さて、以上で「ServiceDefintion.csdef」の編集は終了しました。続いて「Default.apsx」を編集してアプリケーションのユーザーインターフェイスを定義しましょう。

 以下にサンプルで配置するコントロールの一覧を示します。

Default.aspxのコントロール
コントロール名 ID 説明
ScriptManager ScriptManager1 AJAX利用のため
UpdatePanel UpdatePanel1 Labelコントロールを自動更新するため
Label Label1 ローカルストレージの内容を表示する
TextBox TextBox1 テキストを入力する
Button Button1 テキストをローカルストレージに書き込むボタン
Button2 テキストをログに書き込むボタン

 また、以下にVisual Studio 2008で編集中のフォームレイアウトのキャプチャも示します。配置の際に参考にしてください。

Default.aspxを編集
Default.aspxを編集

 実際のコードはサンプルファイル内のソースを参照してください。ASP.NETに関する詳しい説明は本連載の趣旨からそれますので、ここでは控えたいと思います。Visual Studio 2008におけるASP.NET AJAX開発に関してさらに説明が必要な場合は、『ASP.NET AJAXの開発をさらにサポート「ASP.NET 3.5 SP1」』も参照してください。

 続いてビハインドコード「Default.aspx.cs」を編集します。以下にコードの内容を示します。

[リスト2]Default.aspx.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Microsoft.ServiceHosting.ServiceRuntime;
using System.IO; //usingディレクティブを追加
using System.Text;

namespace CloudService1_WebRole
{
    public partial class _Default : System.Web.UI.Page
    {

        protected void Button1_Click(object sender, EventArgs e)    //書き込みボタンのイベント
        {
            string message = String.Format("{0} {1}{2}", DateTime.Now, TextBox1.Text, Environment.NewLine);//文字列に時間と改行を追加
            Write(message); //書き込みの内容をWriteメソッドに渡す
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            RoleManager.WriteToLog("Information", TextBox1.Text);   //テキストの内容をログに書き込み
        }

        public void Write(string storageText)   //ローカルストレージに文字列を記録するメソッド
        {
            ILocalResource resource = RoleManager.GetLocalResource("CloudService1Storage"); //ローカルストレージの使用を宣言
            string path = Path.Combine(resource.RootPath, "storage.txt");   //パスの生成

            File.AppendAllText(path, storageText, Encoding.UTF8);    //引数の内容を書き込み

            Read(path);//ローカルストレージのパスを指定しファイルの内容を読み込むメソッドに渡す

        }

        public void Read(string path) //ファイルの内容を読み込み表示するメソッド
        {
            StreamReader sReader = new StreamReader(path, Encoding.UTF8);   //ローカルストレージ上のファイルから読み込み
            string msg = string.Empty;
            while (sReader.Peek() >= 0)//1行ずつ読み込む
            {
                string sTemp = sReader.ReadLine();
                msg += sTemp + "<br/>";
            }
            sReader.Close();

            Label1.Text = msg;  //Labelコントロールに出力

        }

    }
}

 コードに関する詳細はコメントを参照してください。Windows Azure特有のコードとしてRoleManagerクラスのWriteToLogメソッドおよび同クラスのGetLocalResourceメソッド、そしてILocalResourceインターフェイスを実装したオブジェクトを利用しています。それぞれ以下に簡単な説明を示します。

Windows Azure特有のコード
名称 説明
RoleManager.WriteToLog 値をログに書き込むメソッド
RoleManager.GetLocalResource サービス定義ファイル(ServiceDefintion.csdef)で定義されたローカルストレージの参照を返すメソッド。戻り値はILocalResourceインターフェイスのオブジェクト
ILocalResource ローカルストレージを表すインターフェイス。ILocalResourceインターフェイスを実装したオブジェクトのRootPathプロパティはパスを表す

 RoleManager.WriteToLogメソッドの書式は次のとおりです。

RoleManager.WriteToLogの書式
RoleManager.WriteToLog([string eventLogName], [string message]);

 eventLogNameにパラメータとして指定できるのはCritical、 Error、Warning、Information、Verboseの各イベントを表す文字列のみです。ただしCriticalイベントは緊急の警告メッセージであり、指定した場合はクラウド・サービス本体にもイベント発生が通知され、オペレータからの確認対象になる可能性があります。特に緊急性のないメッセージのパラメータにCriticalイベントを指定するべきではありません。

 また、コードからも分かるように、ILocalResourceインターフェイスからRootPathプロパティでパスを取得した後は、ローカルストレージ上のファイルは通常のファイルと同じようにFileクラスなどで扱うことができます。

 上述のコードについてさらに詳しい情報が必要な場合はMSDNのドキュメントを参照してください。

 編集が済んだらサンプルをローカルで実行してみましょう。メニューバーから[デバッグ]-[デバッグ開始]を選択します。正しく実行できればブラウザは先ほどの例と同様の画面を表示するはずです。

 テキストボックスに適当な文字列を入力し[ストレージ]ボタンをクリックすると、内容をローカルストレージ上のテキストファイルに追記すると同時に、画面に反映します。[ログ]ボタンをクリックした場合はテキストの内容をイベントログに記録します。

 ブラウザからはイベントログを確認できないので、ローカルでアプリケーションを実行している仮想マシン(Development Fabric)のユーザーインターフェイスから確認しましょう。仮想マシンのユーザーインターフェイスを起動するには下のキャプチャでは左端にある、タスクトレイ内のギヤのような形状のアイコンを右クリックします。

タスクトレイに表示されたアイコン
タスクトレイに表示されたアイコン

 表示されたタスクメニューから[Show Development Fabric UI]を選択してください。以下の画面のように仮想マシンのユーザーインターフェイスが立上がります。

Development Fabric UI
Development Fabric UI

 左側ペインは現在実行しているアプリケーションの構成です。画面ではアプリケーション「CloudService1」でWebロールを実行していることを表しています。「0」という数字はインスタンス番号を表しており、この場合はインスタンスが一つだけ起動していることを示しています。エクスプローラ風のインターフェイスから「0」を選択すると右側ペインはイベントログを表示します。先ほどテキストボックスから入力したメッセージがイベントログに記録されているのが確認できるでしょうか(画面では上部の「テスト書き込みです。」という部分)。

次のページ
アプリケーションの配置

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

WINGSプロジェクト 土井 毅(ドイ ツヨシ)

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4122 2009/07/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング