ASP.NET Universal Providersの設定
先ほども説明したとおり、ASP.NET Universal ProvidersはSDKに同梱されているため、特別なインストールは不要ですが、利用するには設定が必要です。
[1]Webロールを作成する
Visual Studioを管理者権限で起動し、[ファイル]-[新規作成]-[プロジェクト]を選択します。Windows Azureプロジェクトを作成し、[ASP.NET Webロール」を作成します。この状態で、すでにASP.NET Universal Providersは、プロジェクトに取り込まれています。[ソリューションエクスプローラー]の参照設定から「System.Web.Provider」への参照(注6)が確認できます(図5)。
アセンブリや使用許諾(EULA)、READMEファイルなどは、「ソリューションフォルダ\packages\System.Web.Providers.1.0.1」に格納されています。
[2]Web.configを設定する
Web.configファイルを開きます。基本的な構成設定は、初めから記述されていますがいくつか修正する必要があります(リスト1)。
<configuration> ... <connectionStrings> ... <!-- (1) 接続先の設定--> <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet_177ec2b52bf64bc68eef09511d71e318;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> ... <!--(2) 状態管理プロバイダの設定 --> <sessionState mode="Custom" customProvider="DefaultSessionProvider"> <providers> <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> </providers> </sessionState> </system.web> <system.webServer>
(1)は既定の接続先(DefaultConnection)への設定文字列です。最初は、SQL Server Expressのインスタンスへ接続されるように構成されています。ここでは、まず開発環境で実行するために変更せず、後ほど編集します。
(2)のsessionState要素のmode属性は、初期状態だと「InProc」です。これを「Custom」に変更して指定されたカスタムセッション状態プロバイダーが使用されるように構成します。
[3]エミュレーター上で実行する
セッション情報を格納するASP.NETアプリケーションを、Windows Azure エミュレーター上で実行します。プログラムの詳細は、サンプルファイルを確認してください。
図6のように、初回アクセス日時などの情報をセッション状態に格納するプログラムです。複数のブラウザからアクセスし、正しくセッション情報が共有できているか確認してください。
[4]セッションデータの確認
セッション情報はSQL Server Expressのインスタンスに格納されています。SQL Server Management Studioを起動し、オブジェクトエクスプローラーのデータベースを確認します(図7)。
「aspnet_」で始まるデータベースが、ASP.NET Universal Providersで作成されたデータベースです。初回リクエスト時に、セッション情報格納用テーブルとともに作成されます。セッションの有効期限が切れたデータの削除は、あるタイミングで接続があった場合にチェックされ削除されます。有効期限切れのセッションデータが多くある場合、レスポンスが悪化する可能性がありまが、小規模な利用なら問題にならないでしょう。
開発環境におけるデータベース名は、リスト1 ‐(1)の接続文字列中に埋め込まれています。プロジェクトごとに異なる名前が付けられるため、不要になったデータベースは手動で削除する必要があります。