2017-06-14 56 views
2

ビューステートMACの検証に失敗しました。このアプリケーションがWebファームまたはクラスタによってホストされている場合は、構成で同じvalidationKeyおよび検証アルゴリズムが指定されていることを確認してください。 AutoGenerateはクラスタ内では使用できません。30分以上ポストバックしないと、「Viewstate MACの検証に失敗しました」というエラーを防ぐ方法を教えてください。

私はこのエラーを防ぐ方法を見つけようとしています。ユーザーがページを30分以上開いてから投稿したイベントを発生させると、私のサイトで発生しています。このエラーと私の問題を理解する方法は、アプリケーションプールがリサイクルされ、ビューステートがもう有効ではないということです。私はセッションを生かし続けることなくこの問題を克服し、それを行うためのリソースを無駄にすることがわかりません...このタスクを完了するための巧妙な方法はありますか?

+0

そのページでViewStateを完全に無効にします。とにかくそのページに本当に必要なものではない可能性があります。 – VDWWD

答えて

2

thisページによると、このエラーが取得される可能性がありますなぜ4つの理由があります。ファームで(マルチサーバ環境を)

  1. アプリケーションが実行されているが
  2. ワーカープロセスは、IIS 7.0 *アプリケーションを使用していますLoadUserProfile = false
  3. Page.ViewStateUserKeyプロパティを使用して構成されたプールID
  4. アプリケーションプールが不正な値です

*注:これは、IIS 7.5以降の記事ではなくなりました。

大きな画像

問題の全体像は、ビューステートデータを暗号化するために使用される暗号鍵は、(上記のものの理由のものまたは組み合わせのいずれかの)永続化されていないことであり、したがって、新しい暗号化キーであります元のものと一致しない生成されます。このキーを保持する(またはアプリケーションで正しいキーを使用させる)方法はいくつかあります。以下の解決策を参照してください。

ソリューション

  1. は、手動でマシンキーが永続化され、管理アプリケーションを実行するためのユーティリティます。aspnet_regiis web.configファイル
  2. 使用中のmachineKeyを設定します。
  3. HKCUレジストリではなく、HKLMレジストリにマシンキーを保持するPowerShellスクリプトを実行します。
  4. LoadUserProfile = trueを設定すると、HKCUレジストリハイブをアプリケーションで使用できるようになります。
  5. Page.ViewStateUserKeyプロパティの正確性をチェックして、消費された値がキーが生成されたときの値と一致するかどうかを確認します(つまり、このプロパティを使用する場合)。

これは概要です。問題の原因(#3のPowerShellスクリプト)またはその問題の解決策の詳細については、特定のケースのトラブルシューティングを行い、ソリューションに最も適したものを選択する記事をご覧ください。

関連する問題