2

実稼働環境では、IISでホストされているasp.netアプリケーション、実際には多くのWebアプリケーションがあります。すべてのアプリは大量のメモリを消費しますが、現時点でそれを制限する唯一の方法はリサイクルです(nHibernateはメモリをリークしているようで、大量の文字列コレクションを作成しています)。問題は、リサイクル後もユーザーをログアウトし続けるのか、それともセッションをドロップするのかということです。ローカルコンピューターでは、問題を再現できませんでした。運が悪かった状態で状態サーバーを使用しようとしましたが、問題は続きました。SQLStateの節約は何かを妨げるのでしょうか、それとも私はリードを逃したり、何かを逃したりするだけでしょうか。

4

3 に答える 3

3

アプリケーションプールがリサイクルされると、セッションデータがメモリ(InProc、デフォルト)に保存されている場合、すべてのセッションが失われます。

セッションは、ユーザーのブラウザにキーを含むCookieを配置し、そのキーをサーバーのステートマシンに保持することによって作成されます。

SQL Serverを使用してセッションを保存する場合は、サーバーがセッション情報を失うことを回避できます。MSDNのセッション状態モード

于 2012-04-22T13:28:14.690 に答える
2

答えは驚くべきもので、アプリケーションにログインしたときのビューステートエラーに関連していました。MSDNサイトの1つ、特にこの行で適切な説明を見つけました。

machineKeyに関して

「[...]アプリケーションプールがユーザーアカウントで実行されている場合、上記のキーは生成されず、断続的に無効なビューステートエラーが発生します。」

結論として、実行しなければならなかったのはマシンキーを生成することだけであり、リサイクルによってユーザーが再認証されることはなくなりました。

于 2012-05-15T10:55:26.597 に答える
0

あなたは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プロパティの値にアクセスすると、現在選択されているセッション状態を表示できます。

于 2012-04-22T13:51:56.620 に答える