19

ロードバランサーによって管理される2つのWebサイトとして構成されたASP.NETMVCワークフローがあります。Webサイトはセッション状態プロバイダーとしてSQLServerを使用し、認証スイッチをオフにします(必須ではありません)。

現在、散発的にセッション状態が失われているように見えます。これは、リクエストが代替サーバーによって処理されているためだと思います。そのため、ロードバランサーの判断に応じて、基本的にユーザーはサーバーからサーバーにジャンプします。ワークフローの同じ段階で常に「セッション状態が失われる」とは限らないため、Webファームの構成+SQLサーバーのセッション状態に関連していると思います。

どちらのアプリケーションも同じマシンキーを使用して、SQLサーバーに格納されているセッション状態を暗号化および復号化します。

両方のサーバーの構成は次のとおりです。

<authentication mode="None" />
<sessionState mode="SQLServer" sqlConnectionString="{connection-string}" />
<machineKey decryptionKey="777CB456774AF02F7F1AC8570FAF31545B156354D9E2DAAD" 
            validationKey="89B5B536D5D17B8FE6A53CBB3CA8B8695289BA3DF0B1370BC47D362D375CF91525DDB5307D8A288230DCD4B3931D23AED4E223955C45CFF2AF66BCC422EC7ECD" />

これは両方のサーバーで同じであることを確認しましたが、不足しているものはありますか?

単一のサーバーを使用している場合、これは開発環境では発生しません。

私は金曜日のブルースに苦しんでいるのではないかと心配しています。来週は間違いなく答えがわかります。悲しいことに、待ちたくありません。

何か案は?

4

3 に答える 3

29

問題が見つかりました。

SQL Serverを使用してセッション状態を共有する予定のアプリケーションを作成する場合、IISで構成されているのと同じIDが必要です。これは、生成されるセッションIDがアプリケーションIDに基づいて生成されるためです。(内部的には、アプリケーションIDはLM / W3SVC/1のようなものです。

2つのサーバーは、IISのアプリケーションごとに異なるIDを持っていました。解決策は、各サーバーの[Webサイトの管理]->[詳細設定]でIDを変更することです。

ここに画像の説明を入力してください

于 2012-05-14T12:59:32.460 に答える
8
  1. IISマネージャーを使用して、ルートレベルとWebサイトレベルの両方でマシンのキー設定を再確認します。

ここに画像の説明を入力してください

  1. マシンキー要素のIsolateApps修飾子を確認します-http: //msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.100%29.aspx

  2. 最近3.5から4.0にアップグレードしましたか?

  3. 最後の手段-両方のマシンでappPoolsをリサイクルし、IISを再起動します。

于 2012-05-11T17:22:50.387 に答える
6

セッションには(Web)アプリケーションスコープがあります。このMSKBが役立つかどうかを確認してください。

更新:興味深い反対票。おそらく私の提案にはもっと明確さが必要です。

マシンキーの照合に加えて、サイトのIIS構成も照合する必要があります(つまり、IISの同じアプリケーション」(アプリケーションパス)です。

于 2012-05-11T18:14:28.770 に答える