デフォルトで、セッション状態の値および情報はASP.NETプロセス内のメモリーに格納されます。ASP.NETで提供されるセッション状態プロバイダを使用すると、セッション・データを個別のプロセスで管理するセッション状態サーバーを使用できます。あるいは、SQLデータベースにセッション状態データを保持することもできます。ASP.NET 2.0では、カスタムのセッション状態プロバイダを作成して、ASP.NETアプリケーションでのセッション状態データの格納方法をカスタマイズできます。
Coherence for .NETには、Coherenceキャッシュを使用してセッション状態を格納するカスタムのSessionStateStoreProvider
実装が組み込まれています。そのため、Coherence for .NETは、Webファーム内で稼働する大規模なASP.NETアプリケーションにとって最善のソリューションになります。このシナリオにおけるその他の選択肢としてStateServer
またはSqlServerStateProvider
を使用できますが、StateServer
を使用するとWebファーム全体でシングル・ポイント障害が発生し、SqlServerStateProvider
を使用すると理論上はクラスタ化が可能ですが、処理速度が著しく低下し、スケーラビリティも制限されます。さらにStateServer
およびSqlServerStateProvider
とは異なり、CoherenceSessionProvider
はキャッシュ・イベントを通じてSession
.End
イベントをサポートします。これをサポートするのはInProc
のみですが、それをWebファーム環境で使用することはできません。
CoherenceSessionStore
の唯一の要件は、セッションに格納されているすべてのオブジェクトがシリアライズ可能であることです(POFではなく.NETでシリアライズ可能であること)。この要件は、Microsoftが提供する両方のプロセス外セッション・ストアにも適用されます。したがって、StateServer
またはSqlServerStateProvider
を使用する既存のASP.NET 2.0アプリケーションを変更してCoherenceSessionStore
を使用するようにするには、Web.config
ファイルに次の行を追加するだけで済みます。
例21-1 CoherenceSessionStoreを使用するようにASP.NETアプリケーションを変更
<sessionState mode="Custom" customProvider="CoherenceSessionProvider" timeout="20"> <providers> <add name="CoherenceSessionProvider" type="Tangosol.Web.CoherenceSessionStore, Coherence" cacheName="dist-session-cache"/> </providers> </sessionState>
アプリケーション内ではコード変更が不要であることに注意してください。
CoherenceSessionProvider
はデフォルトでSession_OnEnd
イベントをコールできません。そのため、このイベントを送信するようプロバイダを構成するには、sessionEndEnabled
属性をtrue
に設定する必要があります。
例21-2 Session_OnEndイベントに対するサポートの追加
<sessionState mode="Custom" customProvider="CoherenceSessionProvider" timeout="20"> <providers> <add name="CoherenceSessionProvider" type="Tangosol.Web.CoherenceSessionStore, Coherence" cacheName="dist-session-cache" sessionEndEnabled="true"/> </providers> </sessionState>
Coherence for .NETを直接またはCoherenceSessionProvider
を介して(あるいはその両方の方法で)使用しているWebアプリケーションでは、そのアプリケーションが終了したときに、クラスタでCoherence*Extendプロキシ・サーバーが使用していたリソースを解放するために必ずCacheFactory.Shutdown()
をコールする必要があります。そのためには、Global.asax
ファイルに記述したApplication_End
イベント・ハンドラでCacheFactory.Shutdown()
のコールを指定します。これを例21-3に示します。