実稼働環境では、IISでホストされているasp.netアプリケーション、実際には多くのWebアプリケーションがあります。すべてのアプリは大量のメモリを消費しますが、現時点でそれを制限する唯一の方法はリサイクルです(nHibernateはメモリをリークしているようで、大量の文字列コレクションを作成しています)。問題は、リサイクル後もユーザーをログアウトし続けるのか、それともセッションをドロップするのかということです。ローカルコンピューターでは、問題を再現できませんでした。運が悪かった状態で状態サーバーを使用しようとしましたが、問題は続きました。SQLStateの節約は何かを妨げるのでしょうか、それとも私はリードを逃したり、何かを逃したりするだけでしょうか。
3 に答える
アプリケーションプールがリサイクルされると、セッションデータがメモリ(InProc、デフォルト)に保存されている場合、すべてのセッションが失われます。
セッションは、ユーザーのブラウザにキーを含むCookieを配置し、そのキーをサーバーのステートマシンに保持することによって作成されます。
SQL Serverを使用してセッションを保存する場合は、サーバーがセッション情報を失うことを回避できます。MSDNのセッション状態モード。
あなたはStateServerモードを試したと書いていますが、私がそれを間違って知らなければ、stateserverモードはsqlserverのように機能します。StateServerはWindowsサービスから起動でき、web.config内で、サーバーのIPアドレス(起動して動作している状態サーバー)を設定できます。
どういうわけかstateserverが機能しない場合は、sqlserverが機能するとは思えません。問題は私が感じる別の領域にあるかもしれません。
ASP.NETセッション状態は、セッションデータのいくつかの異なるストレージオプションをサポートします。各オプションは、SessionStateMode列挙の値によって識別されます。次のリストは、使用可能なセッション状態モードについて説明しています。
InProcモード。セッション状態をWebサーバーのメモリに保存します。これがデフォルトです。
StateServerモード。ASP.NET状態サービスと呼ばれる別のプロセスにセッション状態を格納します。これにより、Webアプリケーションが再起動された場合でもセッション状態が保持され、Webファーム内の複数のWebサーバーでセッション状態を利用できるようになります。
SQLServerモードは、セッション状態をSQLServerデータベースに格納します。これにより、Webアプリケーションが再起動された場合でもセッション状態が保持され、Webファーム内の複数のWebサーバーでセッション状態を利用できるようになります。
カスタムモード。カスタムストレージプロバイダーを指定できます。
セッション状態を無効にするオフモード。
アプリケーションのWeb.configファイルのsessionState要素のmode属性にSessionStateMode列挙値を割り当てることにより、ASP.NETセッション状態で使用するモードを指定できます。InProcおよびOff以外のモードでは、このトピックで後述するように、接続文字列値などの追加のパラメーターが必要です。HttpSessionState.Modeプロパティの値にアクセスすると、現在選択されているセッション状態を表示できます。