3

2 つのサーバーに展開されている asp.net Web サイトがあります。サーバーの前には、2 つのサーバーに要求を分散するロード バランサーがあります。セッションを保存するには、SQL Server を使用します。私の問題は、ユーザーがページに移動してボタンを押すと、ロードバランサーによってリクエストがポストバックとして認識されない他のサーバーにルーティングされることです。サーバーが同じマシンキーを共有している限り、ポストバックがあっても問題なく動作しないのはなぜですか?

詳細:

  1. 両方のサーバーに同じマシン キーが構成されており、セッション オブジェクトを設定して出力する小さなデバッグ ページを作成して、実際のセッションが両方のサーバーで同じであることを確認しました。

  2. キーと 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
    
  3. サイトの [詳細設定] の下の IISMgr にあるサイトの ID は、すべてのサーバーで同じです。

  4. 同じサーバーにいる限り、すべてが期待どおりに機能します。

  5. ページをローカルで実行すると (最初に Web ファームに要求し、次に 2 番目のボタン クリックをフィドラーによって localhost にルーティングします)、同じ動作が得られます。

  6. コードをステップ実行してIsPostBackプロパティを読むと、私の問題はthis._fPageLayoutChangedページが真であることです。しかし、私が物事を正しく理解していれば、ポストバックが発生したときに偽になるはずですか? その実装に関するSO質問

  7. どちらのサーバーも IIS 7 を実行しています。

  8. どちらのサーバーも Windows Server Web SP2 を実行し、同じ Windows 更新プログラムがインストールされています。一方、私のローカル開発マシンは Windows 7 を実行しています。

4

1 に答える 1

0

web.config に Machinekey の手動エントリを追加すると、問題が解決したことがわかりました。グローバル値と質問で詳しく説明されているハッシュを確認したので非常に奇妙ですが、今では機能します。

私はそれを取り戻します。前回のリリース後、問題が再発したため、マシンキーの追加はまったく役に立ちませんでした。

于 2012-09-17T12:48:55.167 に答える