2 つのサーバーに展開されている asp.net Web サイトがあります。サーバーの前には、2 つのサーバーに要求を分散するロード バランサーがあります。セッションを保存するには、SQL Server を使用します。私の問題は、ユーザーがページに移動してボタンを押すと、ロードバランサーによってリクエストがポストバックとして認識されない他のサーバーにルーティングされることです。サーバーが同じマシンキーを共有している限り、ポストバックがあっても問題なく動作しないのはなぜですか?
詳細:
両方のサーバーに同じマシン キーが構成されており、セッション オブジェクトを設定して出力する小さなデバッグ ページを作成して、実際のセッションが両方のサーバーで同じであることを確認しました。
キーと Id をさらに検証するために
HttpRuntime.AppDomainAppId
、ハッシュされ(MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey")
た machinekey とsessionId の値をSession.SessionID
出力し、両方のサーバーで同じ出力を得ました。このためのベースとしてセッション デバッグ ページを使用しました。その出力は次のようになります (実際のマシンキー ハッシュとセッション ID をダミー値に置き換えました)。Current DataTime: 2012-07-20 10:52:58 Current Session Mode: SQLServer HttpRuntime.AppDomainAppId: /LM/W3SVC/5/ROOT Hashed with the MachineKey: HjtOPW5dfoihdlkd+SdsfkEWfs0= Local Machine Name: 127.0.0.1 Current Session ID: 2alsudhsdkjlhcmnsdfkhsdf
サイトの [詳細設定] の下の IISMgr にあるサイトの ID は、すべてのサーバーで同じです。
同じサーバーにいる限り、すべてが期待どおりに機能します。
ページをローカルで実行すると (最初に Web ファームに要求し、次に 2 番目のボタン クリックをフィドラーによって localhost にルーティングします)、同じ動作が得られます。
コードをステップ実行して
IsPostBack
プロパティを読むと、私の問題はthis._fPageLayoutChanged
ページが真であることです。しかし、私が物事を正しく理解していれば、ポストバックが発生したときに偽になるはずですか? その実装に関するSO質問どちらのサーバーも IIS 7 を実行しています。
どちらのサーバーも Windows Server Web SP2 を実行し、同じ Windows 更新プログラムがインストールされています。一方、私のローカル開発マシンは Windows 7 を実行しています。