3

この問題に対する標準的な対応をすべて試したと思います。また、この問題に関する何百もの質問や投稿を読んだことは知っていますが、いずれも解決していないようで、原因を明らかにしているようには見えません。私のシナリオにあります。(私は 5 時間ダウンしており、それに近づいていません :-( )

  • 2 台のサーバーの Web ファームがあります。

  • 両方のマシンの machine.config にマシン キーと検証キーを設定しました

  • 暗号化: SHA1、復号化: AES - これらはデフォルトです。変更することはできますか?

  • チェーン内の他の構成ファイル (web.cfg、apphost など) にこれらの値が設定されていないことを確認しました。

  • マシン キーの値を吐き出すページを (この SO に基づいて)サイトに追加し、それらが両方のマシンへの要求全体で同じであり、machine .config にある値と一致することを確認しました。

  • サーバー側のセッション状態は共有状態サーバーにあります。セッション ID が 2 つのサーバーへの要求間で一定のままであることを確認しました。

  • 投稿を開始する前に、ページが完全に読み込まれ、__EVENTVALIDATION 隠しフィールドがページにレンダリングされていることを確認しました。ビューステートのサイズは 7.64kb でそれほど悪くありません

サーバー 1 への要求からページがレンダリングされ、サーバー 2 に戻されると、恐ろしい結果が得られます...

Error Message:

Unable to validate data.
at System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier,   Int32 start, Int32 length, Int32& dataLength)
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)   HttpApplication.RecordError => HttpApplication.RaiseOnError => global_asax.Application_Error

投稿は、標準の純粋な asp リンクボタンによってトリガーされます。ページで ajax が実行されることはありません。

どんな助けでも大歓迎です。

enableViewStateMAC = false を設定することは解決策ではありません:-)

4

3 に答える 3

2

構成された状態でサーバーを継承したので、キーの有効性について疑問を呈したことはありません!!! ...両方のサーバーで一致することを確認しました...

暗号化/復号化および検証アルゴリズムの設定はすべてそのままにして、他のツールよりもいくつかのオプションがあるこのツールを使用して新しいキーを生成しました。

問題が解決しました

教訓: 疑わしい場合は、新しいキーを生成します

...しかし、なぜ、どのように?ビューステートを使用した一部のポストバックは、古いキーで問題なく機能していました。問題が明らかになったのは、ポストバックが別のサーバーへの場合のみでした。キーが無効だった場合-文字または何かが欠落している場合-すべてのポストバックが失敗したはずです-私は思います

于 2013-04-09T13:35:50.423 に答える
1

また、machineKeys が同じであることを確認する簡単な方法は、web.config に次のような行を追加することです。

注意: 両方のサーバーに同じ web.config があり、validationKey と decryptionKey が有効であることを確認すると仮定します。

http://aspnetresources.com/tools/machineKeyを使用して生成できます。

<system.web>
  <machineKey validationKey="*D9B0EDEA69D81A89BF5FBA2B08BAF691013F86B89A1F6BA8068C6ECC9539074" decryptionKey="*AE2B1966AF65D08F03EDFB" validation="SHA1" decryption="AES" />
于 2013-04-09T12:33:30.913 に答える