記事作成時点でプレビューですが、新しいキャッシュサービスとして Redisキャッシュサービスが Windows Azure 上で使用できるようになっています。 Redis キャッシュをセッション状態ストアとして使用する RedisSessionStateProvider がMicrosoftから提供されているので、RedisSessionStateProvider を使用して Redisキャッシュをセッション状態ストアとして使用する簡単なサンプルを記載します。
正式にリリースされる前にフェードアウトした感のあるマネージキャッシュは日本リージョンで作成できませんでしたが、Redisキャッシュは日本リージョンに作成できるので、有力なキャッシュサービス(もしくはセッション状態ストレージ)の選択候補になると思います。また、In-Roleキャッシュ異なり独立した キャッシュサービスなので、ほかのクラウドサービス間やアプリケーション間でキャッシュデータを共有できるはずです(試していませんが)のでそこも新しい使い方ができると思います。
検証環境は次の通りです
- Visual Studio 2013 Premium
- 構成済み Redisキャッシュサービス
- Azure Webサイト
本記事のサンプルを実行する前提条件として、 Redisキャッシュ自身は Azureのポータル(新ポータル)で作成済みであることとします。
1.Azure WebサイトとVisual Studioのソリューションの準備
Visual Studio を起動して、Web アプリケーションプロジェクトを作成します。同時に Azure Web サイトも作成します。
Visual Studio 上で新しくプロジェクトを作成します。下図のように Cloud > ASP.NET Web アプリケーションをプロジェクトテンプレートとして選択して作成します。
新規 ASP.NET プロジェクトダイアログが表示されるので、 テンプレートの選択から Empty を選択します。 以下にフォルダーおよびコア参照を追加で Web Forms にチェックします。 右下の クラウド内のホストにチェックし、ドロップダウンで Web サイトを選択します。これで、プロジェクト作成と同時に Azure Webサイトも作成されます。 OK ボタンをクリックします。
Microsoft Azure サイトの構成ダイアログが表示されますので、サイト名や作成するリージョン、データベースなどをせってアップし OK ボタンをクリックします。
ここまでで プロジェクトと Azure Webサイトの準備はできました。
2. Sessionプロバイダーの構成とサンプルページの作成
NuGetパッケージマネージャーを起動して、 RedisSessionStateProvider というキーワードでプロバイダーを検索します。このとき、下図のようにドロップダウンでリリース前のパッケージを含める を選択しておいてください。 RedisSessionStateProvider が検索されたらインストールをクリックします。
インストールが成功すると、プロジェクトの参照設定に下図のように Microsoft.Web.RedisSessionStateProvider と StackExchange.Redis.StrongName への参照が追加されていることを確認できます。
あとは、セッションプロバーダーとして、 RedisSessionStateProvider を使用する設定を行います。
Web.config を編集する方法は、下記URLが参考になります。
Azure Redis キャッシュ (プレビュー) ASP.NET セッション状態プロバイダー
http://msdn.microsoft.com/ja-jp/library/azure/dn690522.aspx
構成例として、たとえば次のようになります。[Redis Cache Name]には構成したRedisキャッシュのエンドポイントの名前を入力します。[ACCESS KEY]には、Redis キャッシュのポータルのUIから取得できるアクセスキーを設定します。
<sessionState mode="Custom" customProvider="MySessionStateStore"> <providers> <!-- Web.config に直接記述したくない場合は、 Web.config の変換機能を使用できます。 --> <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="[Redis Cache Name].redis.cache.windows.net" accessKey="[ACCESS KEY]" ssl="false" /> </providers> </sessionState>
Web.configを直接編集せずに、Release モードでのみRedis キャッシュを使用するようにしたい場合は、 Web.config の変換機能を利用できます。
Web アプリケーション プロジェクト配置の Web.config 変換構文
http://msdn.microsoft.com/ja-jp/library/dd465326%28VS.100%29.aspx
セッションプロバイダーのセットアップが終わったので、Default.aspx とコードビハインドファイル Default.aspx.cs ファイルをセッション情報を使うように簡単なサンプルコードを記載します。以下 Default.aspx の例です。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Sample.AzWebsite.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> アクセス回数は<%= this.AccessCount %> です。 </div> </form> </body> </html>
Defautl.aspx.cs コードビハインドファイルのサンプルです。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Sample.AzWebsite { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } public int AccessCount { get { int cnt = 0; string key = "Count"; if (this.Session[key] != null) { cnt = (int) this.Session[key]; } cnt++; this.Session[key] = cnt; return cnt; } } } }
あとは、実際に Azure Webサイトにパブリッシュして、動作することを確認します、
3.まとめ
簡単ですが説明は以上です。Redisキャッシュをセッション状態プロバイダーとして使用する設定は簡単に実装できます。Redisキャッシュ自身もポータル上で作成できるのでプレビュー版とはいえ使用する敷居は高くありません。 Redisキャッシュが正式にリリースされると、 日本リージョンでも In-Roleキャッシュ以外の選択肢が出てくるので正式なリリースを期待したいです。