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(); }