4

これがエラーです

ポストバックまたはコールバック引数が無効です。イベントの検証は、設定で使用するか、ページで <%@ Page EnableEventValidation="true" %> を使用して有効にします。セキュリティ上の目的で、この機能は、ポストバック イベントまたはコールバック イベントへの引数が、それらを最初にレンダリングしたサーバー コントロールから発信されていることを確認します。データが有効で期待される場合は、ClientScriptManager.RegisterForEventValidation メソッドを使用して、検証のためにポストバックまたはコールバック データを登録します。

そして、私はこれらもほぼ同じくらい頻繁に取得しています

このページの状態情報は無効であり、破損している可能性があります。

他に約 20 件の「無効なポストバックまたはコールバック引数」の質問と回答を読みましたが、私の質問は一般的なカテゴリのいずれにも該当しないと思います。

  • ASP.NET が認識していなかったクライアント側で動的に作成または変更されたコントロール
  • 「<」や「>」文字などのコードまたはコードの一部を送信するユーザー
  • if (!IsPostBack) を慎重に使用せずに、すべての Page_Load イベントでデータをバインドする
  • 障害のある AJAX CascadingDropDown エクステンダー
  • あなたのサイトをハッキングしようとするロシア人 (!)
  • ダイヤルアップ (!) を使用するユーザーで断続的に発生する問題
  • ASP.NET バージョン間の不一致。たとえば、サーバー ファームで ASP.NET 1.1 と 2.0 の両方を同時に使用している

私の問題は、このリストの最後の問題に最も似ていると思います。

2 つの Microsoft Azure Web サーバーの負荷分散されたテスト環境で、フォーム ポストバック時に断続的に (ただし頻繁に) エラーが発生します。

サーバーの 1 つで生成されたページが別のサーバーにポストされたときに問題が発生することに気付きました。負荷分散を取り除くと (1 つのサーバーのみにヒットするだけ)、問題はなくなります。

私は 1 つの Web サーバーで Win Server 2008 R2 (IIS7.5) を使用し、もう 1 つの Web サーバーで Win Server 2012 (IIS8) を使用しています (私は 2008 に精通しており、2012 には警戒していましたが、学習したかったので、次のいずれかを実行することにしました。あなたが疑問に思っている場合に備えて、それぞれが私の賭けをヘッジするためです)。

2008 マシンは ASP.NET バージョン「4.0.30319. 272」を実行し、2012 マシンは「4.0.30319. 18010」を実行しますが、明らかに異なるバージョンの IIS です。

しかし、どちらも ASP.NET 4.0 を実行しています。.NET は、基盤となるオペレーティング システムを透過的にするはずですよね? したがって、これが問題の原因であるとは確信していません。

1 つのサーバーを再構築してそれらを同じにするのは非常に面倒であり、ASP.NET のわずかな違いが問題の原因でない場合は、それを避けたほうがよいでしょう。

では、ポストバック時に 2 つのサーバーが互いのフォームを受け入れない理由は他にありますか? 参考までに、両方のサーバーの web.config にエントリを追加して、「viewstate MAC の検証に失敗しました」というエラーを修正しました。

または、サーバーの互換性を高めるためにできる構成変更はありますか?

ありがとう!

4

3 に答える 3

3

そこで、Web「ファーム」を再構築し、両方のサーバーを 2008R2 にするのに半日を費やしたところ、問題は解消されました。

私の(暫定的な)結論は、Server 2008R2 と 2012 の .NET 4.0.30319... バージョン間のビューステート処理の違い (完全に異なる__EVENTVALIDATION形式を含む) が問題の原因であったということです。

2012 サーバーのセットアップ方法が 2008R2 サーバーとは異なっていた可能性があるため、これについては確信が持てません。しかし、その後、2012 サーバーをビルドするとき、私が書いた 2008R2 ビルド ドキュメントにかなり厳密に従ったため、ビルドをいじくり回して動作させるのに 2 日間費やしたことから、そうしなかったという自信が高まります。明らかな何かを見逃す。

話の教訓 (約 80% の信頼度): .NET のバージョンが同じであっても、ASP.NET の展開でサーバーのバージョンを混在させないでください。

于 2013-02-13T20:32:32.960 に答える