none
viewstate MAC の検証フィールドです。エラーがたまに発生する。 RRS feed

  • 質問

  • VS2005 C# を使ってASP.NETサイトを構築しています.
    サーバー:Windows 2003 Server IIS6.0

    ページ移動(Response.Redirect)時に,次のようなエラーがたまに発生します.
    「viewstate MAC の検証フィールドです。このアプリケーションが Web Farm またはクラスタによってホストされている場合、<machineKey> 構成が同一の validationKey および検証アルゴリズムを指定していることを確認してください。AutoGenerate をクラスタで使用することはできません。」


    複数のアプリケーションで,認証キーを共有したいため,<machineKey>の値は,固定値にしています.
    また,アプリケーションプールのリサイクルに関しても,固定時間以外はリサイクルしないようにしています.
    イベントログをとり,確認もしています.

    Web上で,様々な情報を検索したのですが,解決には至っていません.
    本フォーラム:
    http://social.msdn.microsoft.com/forums/ja-JP/vsgeneralja/thread/a9ecca28-303b-41dd-bf46-ab36767a2fe4/


    どなたか,上記問題を解決された方がおられましたらアドバイスお願いいたします.

    2009年3月9日 3:15

回答

  • こんにちは。中川俊輔です。

    投稿してくださった追加情報のように、レンダリングし終わる前にポストバックしたことが問題だとすると、下記の記事の事例が該当するかもしれません。
    ASP.NET 2.0 and "Validation of ViewState Mac failed" exception
    http://aspadvice.com/blogs/joteke/archive/2006/02/02/15011.aspx

    "DatakeyNames"を使用するGridViewやDetailView等のデータバウンドコントロールを使用しているときに、"__VIEWSTATEENCRYPTED"フィールドがレンダリングされるまえにポストバックされてしまうことが原因です。

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。
    コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。
    詳しくは
    http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。

    マイクロソフト株式会社 フォーラム オペレータ 中川 俊輔
    2009年3月18日 6:01
  •  DataGridView の display を hidden にしておき、body.onload で block に変更する、、、とかだとダメなのかな?
    レンダリングが済むまでにポストバックが発生することが原因なら、レンダリングが終わるまでポストバックを発生させないようにすればいい、、、んですよね?
    Jitta@わんくま同盟
    2009年3月23日 14:29

すべての返信

  • kemnsさん、こんにちは。中川俊輔 です。

    kemnsさんの環境は、クラスターを構築していないということでよろしいでしょうか?

    米国のフォーラムに、"form"タグ内の"action"属性に値が入っているときにエラーが起きたという情報がありました。
    もしaction属性に値が設定されているようでしたら、消してみてください。
    参考:
    http://msdn.microsoft.com/ja-jp/library/dd120y50.aspx


    問題解決の助けになると幸いです。それでは。

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。
    コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。
    詳しくは
    http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。

    マイクロソフト株式会社 フォーラム オペレータ 中川 俊輔
    2009年3月16日 9:21
  • 中川様,返信ありがとうございます. kemnsです.

    ご指摘の点ですが,
    まず,クラスターは構築していません.

    そして,"form"タグ内の"action"属性ですが,何も指定していません.


    追加情報ですが,
    的外れかもしれませんが,ページA→ページBへ移動する時に,ページBが表示される前にページCへの
    移動アクション(メニューを押すなど)した場合に発生する確率が高いです.
    結果的にそういう現象が起きているだけなのかもしれませんが・・・


    以上,お気づきの点ありましたら,アドバイスよろしくお願いいたします.
    2009年3月17日 1:46
  • こんにちは。中川俊輔です。

    投稿してくださった追加情報のように、レンダリングし終わる前にポストバックしたことが問題だとすると、下記の記事の事例が該当するかもしれません。
    ASP.NET 2.0 and "Validation of ViewState Mac failed" exception
    http://aspadvice.com/blogs/joteke/archive/2006/02/02/15011.aspx

    "DatakeyNames"を使用するGridViewやDetailView等のデータバウンドコントロールを使用しているときに、"__VIEWSTATEENCRYPTED"フィールドがレンダリングされるまえにポストバックされてしまうことが原因です。

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。
    コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。
    詳しくは
    http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。

    マイクロソフト株式会社 フォーラム オペレータ 中川 俊輔
    2009年3月18日 6:01
  •  中川様,返信ありがとうございます. kemnsです.

    ご指摘の通り,DatakeyNamesを使用したGridViewを使用しています.

    この場合,GridViewは外せないので,DatakeyNamesを使用しないことも含め,
    ご紹介いただいたサイトをじっくり見て,対策を考えたいと思います.


    ご協力ありがとうございました. 
    また,お力添えいただきたいことがありましたら投稿させていただきます.
    2009年3月23日 12:30
  •  kemnsです. 中川様,返信ありがとうございます. 

    ご指摘のように,DatakeyNamesを使用して,GridViewを使用しています.

    DatakeyNames + GridView(データバウンドコントロール)の場合は,このような現象が発生する
    とすれば, GridViewは外せないので,DatakeyNamesを使用しないアプローチが必要ということですね.


    ご紹介いただいたサイトの情報も含めて,どのような解決策があるか検討したいと思います.


    中川様のお陰で,前進しました. ありがとうございます.

    2009年3月23日 12:37
  •  DataGridView の display を hidden にしておき、body.onload で block に変更する、、、とかだとダメなのかな?
    レンダリングが済むまでにポストバックが発生することが原因なら、レンダリングが終わるまでポストバックを発生させないようにすればいい、、、んですよね?
    Jitta@わんくま同盟
    2009年3月23日 14:29
  • こんにちは、フォーラムオペレータ大久保です。

    kemns さん、フォーラムのご利用ありがとうございます。
    中川が提供しました情報ですが、多少なりとも参考になったようでよかったです。

    中川の投稿と、Jitta さんのアドバイスを「回答としてマーク」させていただきましたが、
    もし見事問題解決できましたら、ぜひ kemns さんがおとりになった方法を教えてください!

    それではー
    マイクロソフト株式会社 フォーラム オペレータ 大久保 直美
    2009年4月7日 5:51