負荷分散されたIIS 7.5 WebサーバーASP.NETセッション状態の問題


14

ユーザーのセッションが奇妙に振る舞うというASP.NET Webサイトに問題があります-セッションデータが表示され、消え、再表示されます。

私は問題が何であるかを知っていると思います:

  1. 私たちのセットアップは、2 x負荷分散Webサーバー+シングルセッション状態データベースです。
  2. ASP.NET SQLセッションステートストレージは、IIS WebサイトインスタンスID(メタベースID)に依存して、着信セッションCookie IDを一意に識別し、値を取得/保存するようです。
  3. ウェブサイトのIIS WebサイトのインスタンスIDは、ライブサーバーごとに異なっている(ID / W3SVC / 1 /ルート WebServerの上のA、ID / W3SVC / 2 /ルート WebサーバB上)。
  4. 負荷分散はクライアントアフィニティを使用していないため、各ユーザーのHTTP要求はいずれかのサーバーに送られます。

したがって、ユーザーがサイトにログオンして移動すると、各HTTP呼び出しはいずれかのWebサーバーに移動できるため、サーバーに応じて異なるIDを持つセッション状態レコードを使用できます。実際には、ユーザーは同時に2つの別々のセッションインスタンスを持ちます。私は、データベースのように、これを確認したと信じてASPStateTempSessionsの各セッションCookie IDが2に対応しているようだ、テーブルのほぼ-同じ名前(自分のIDが唯一の私はに基づいて修正されていると信じて、最後の数文字によって異なり、レコードのAppIDからAspStateTempApplicationsテーブル)互いに数秒以内に作成されます。

したがって、1つのセッションレコードに加えられた変更はそのWebサーバーに対してのみ持続するため、セッション状態は誤動作するように見えます。ユーザーが他の負荷分散サーバーに移動すると、セッション値は消えるか元に戻るように見えます。

ソリューションはサイトのIISインスタンスIDを同期すること(たとえば、両方を/ W3SVC / 1 / Rootにする)であると思いますが、詳細設定の下でIISでその値を編集しようとしました。サイトは、変更するまでそのサーバーで404を返します。

この問題に対応するVBSスクリプト見つけましたが、IIS 6専用であるため、試してみるのが心配です。IIS 7.5で他の誰かがこの状況に遭遇しましたか。どのように修正しましたか?


編集/ソリューション

私の間違いは、IISでサイトインスタンスIDを変更した後にIISを再起動するのを忘れたことです。この後、IDが更新され、2つのWebサーバーでASP.NETセッションが同期されました。

完全な手順:

  1. サーバーLIVE1へのリモートデスクトップ、IIS Mgrを開き、問題のあるサイトをクリックして、サイドバーで[詳細設定]を選択します。
  2. IDを一意の値に変更します(10など)。[OK]をクリックします。
  3. Webサービスを再起動します(c:\windows\system32\iisreset /restart

LIVE2についても同じことを行います(サイトIDがLIVE1と同じであることを確認してください)

サイトIDは、サイトファイルの場所に影響することに注意してください。たとえば、ログファイルフォルダーはC:\inetpub\logs\LogFiles\W3SVC10、たとえば次のようになります。

また、各サーバーのIIS構成ファイルのサイトID属性を編集することにより、これらの変更を手動で実行できることにも注意してくださいC:\Windows\System32\inetsrv\config\applicationHost.config。管理者特権が必要ですが、その後もリセットが必要です。

回答:


11

あなたの質問から判断すると、セッションデータを追跡する中央セッション状態サーバー(DB?)を持っているようです。

また、フォーム認証などの暗号化に使用されるマシンキーを同期する必要があります。これはセッションの識別にも影響する可能性がありますが、わかりません。

IIS 7でマシンキーを構成する

さらに、マシン間で共有された構成を使用する必要があります。これにより、異なるマシンキーの問題が解決される場合があります。

WebサーバーファームのIIS構成の同期?

編集:サイトIDを変更したとき、webrootが変更されたかどうかを確認するためにIISマネージャーを再起動しようとしましたか?構成はIDに接続されている可能性があります。つまり、IDを変更すると、ドキュメントルートなども変更されます。


Jishiのアイデアに感謝しますが、web.configsのmachineKeyを既に同期していました。私は本当に、Webサーバー上のサイトを完全に削除および再構成することなく、サイトのIISインスタンスIDを変更する方法を検討していると思います。
ジェームズマコーマック

サイトIDを変更したときに、Webルートが変更されたかどうかを確認するためにIISマネージャーを再起動しようとしましたか?構成はIDに接続されている可能性があります。つまり、IDの変更はドキュメントルートなどの内容も変更します。
jishi11年

1
うん、それだけだった!IISサービスを再起動するのを忘れました(コマンドラインiisreset / restart)。その後はうまくいきました!この情報で回答を更新してください。承認済みの回答をお送りします。
ジェームズマコーマック

完了しました。喜んでくれました。
獅子
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.