ASP.NETセッションプロバイダーとしての利用
サービス名前空間の作成が完了したので、ここからはAppFabric CachingをASP.NETのセッションプロバイダーとして構成する方法について説明します。
Windows Azure AppFabric SDKのインストール
AppFabric Cachingの利用には、Windows Azure SDKとは別に、Windows Azure AppFabric SDKが必要です。以下のURLからダウンロードしてインストールします。32bit向けと64bit向けが、それぞれ別インストーラで提供されています。お使いの環境に合わせてインストールしてください。
なお、AppFabric CachingとWindows Server AppFabricの開発環境を同じPCに構築することはできません。Windows Server AppFabricのアセンブリはGACにインストールされ、誤った参照が行われるためです。詳細は、「Developing Cache Clients (Windows Azure AppFabric Caching)」を参照してください。
プロジェクト準備
はじめに、Windows Azureプロジェクトを作成し、AppFabric Cachingアセンブリの参照を追加します。
Visual Studioを起動し、[ファイル]-[新規作成]-[プロジェクト]を選択します。Windows Azureプロジェクトを選択し[OK]ボタンをクリックします。新しいWindows Azureプロジェクト作成画面が表示されるため、ASP.NET Webロールで[OK]ボタンをクリックし、新しいソリューションを作成します。
AppFabric SDKで提供されるAppFabric Caching用アセンブリは、.NET Framework 4向けにのみ提供されています。プロジェクトを作成するときは必ず、.NET Framework 4を選択してください。
AppFabric Cachingを利用するために、参照の追加を行います。WebRole1の参照設定を選択し、コンテキストメニューから[参照の追加]を選択します。[参照]タブを選択し、C:\Program Files\Windows Azure AppFabric SDK\V1.0\Assemblies\NET4.0\Cacheを開きます。以下の3つのアセンブリの参照を追加します(図8)。
- Microsoft.ApplicationServer.Caching.Client.dll
- Microsoft.ApplicationServer.Caching.Core.dll
- Microsoft.Web.DistributedCache.dll
これで準備は完了です。
Webフォームの修正
セッションオブジェクトを利用するためにWebフォームを修正します(リスト1)。Webフォームには、セッションオブジェクトを入力するTextBoxコントロールと、結果を表示するGridViewコントロールを配置します。
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Windows Azure AppFabric Cachingサンプル
</h2>
<p>
Role Instance Id =
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</p>
<p>
Key :
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
Value :
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Add" OnClick="Button1_Click" />
</p>
<p>
<asp:GridView ID="GridView1" runat="server">
<RowStyle BackColor="LightBlue" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</p>
</asp:Content>
コードビハインドクラスの修正
入力されたテキストと結果を表示するためにコードビハインドクラスを修正します(リスト2)。新規セッション開始時に、初回アクセス時間をセッションデータに埋め込みます。また、[Add]ボタンのイベントハンドラを定義し、入力されたKeyとValueをセッションデータに格納し、GridVeiwにバインドします。
protected void Page_Load(object sender, EventArgs e)
{
// 新規セッション時に、初回アクセス時間をセッションデータに追加
if(this.Session.IsNewSession)
{
this.Session.Add("初回アクセス", DateTime.Now.ToString());
}
// どのWebロールインスタンスで処理されたか表示
this.Label1.Text = RoleEnvironment.CurrentRoleInstance.Id;
// 非PostBack時は、セッションデータをGridView表示
if (!this.IsPostBack)
{
BindGridView();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
// Textボックスの値取り出し
var key = this.TextBox1.Text;
var val = this.TextBox2.Text;
// 入力値チェック
if (string.IsNullOrWhiteSpace(key))
{
return;
}
// KeyとValueを、セッションデータに追加
this.Session.Add(key, val);
// 結果をGridViewに表示
BindGridView();
}
private void BindGridView()
{
// SessionデータをDictionary<string, string>型に変換
Dictionary<string, string> source = this.Session.Keys.Cast<string>().
ToDictionary(key => key, key => (string)this.Session[key]);
// GridViewにデータバインド
this.GridView1.DataSource = source;
this.GridView1.DataBind();
}

