2

そのため、今朝、MVC3 Web サイトをホストしているサーバーの電源が失われました。オンラインに戻ったため、セッション値がランダムに失われています。これは、ローカル サーバーやステージング サーバーではなく、このサーバーでのみ発生します。セッションはわずか 5 分後にクリアされるため、これはタイムアウトとは関係ありません。セッションは 12 時間後に期限切れになるように設定されています。値が失われても、セッションの SessionID は変更されません。

私は Log4Net を使用しており、この問題を特定するために多くのログを追加しました。Session_Start および Session_End イベントを Global.asax に追加し、コントローラー全体でセッション値をチェックしました。

アイテムのリストを表示するインデックス ビューがあります。リスト内の各項目には、詳細ビューに移動するためのリンクがあります。各アクション呼び出しでセッション値を確認します。詳細ビューからインデックス ビューにコールバックすると、セッション値が常に失われるように見えます。セッションの値が失われるたびに、Session_Start イベントが発生することに気付きました。

Session_End イベントはなく、Start のみです。この Start が発生する原因は何ですか?

私が提供できる情報がさらにある場合は、コメントしてください。できる限り追加します。

4

2 に答える 2

3

InProcSessionStateを使用している場合、セッションの途中でアプリケーション プールがリサイクルされている可能性があります。解決するには、 SQLServer SessionStateMode、StateServer SessionStateMode を使用するか、アプリケーション プールのリサイクルを軽減します。

http://msdn.microsoft.com/en-us/library/ms178586.aspx


SQLServer モードは、セッション状態を SQL Server データベースに保存します。これにより、Web アプリケーションが再起動されてもセッション状態が保持され、Web ファーム内の複数の Web サーバーでセッション状態を使用できるようになります。

于 2012-05-23T22:57:31.707 に答える
0

これはハードウェアの問題でした。この Web サーバーは仮想マシンです。停電がすべての仮想サーバーに影響を与え、多くの I/O の問題とメモリの問題が発生したようです。アプリケーションで状態が失われた領域を絞り込みましたが、まったく一貫していませんでした。

彼らが仮想サーバー ホスト コンピューターを再起動したため、問題は発生しなくなりました。

于 2012-05-25T19:19:23.953 に答える