デフォルトで、セッション状態の値および情報は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に示します。