無効な viewstate です。に苦戦

元々、windows server 2003 IIS6.5で動いてるシステムを
windows server 2008 R2 IIS7.5に移植した時のお話。

稼動して半日、お昼休み明けに大量のExceptionが発生!!

System.Web.UI.ViewStateException: 無効な viewstate です。
System.Web.HttpException: viewstate MAC の検証フィールドです。このアプリケーションが Web Farm またはクラスタによってホストされている場合、<machineKey> 構成が同一の validationKey および検証アルゴリズムを指定していることを確認してください。AutoGenerate をクラスタで使用することはできません。

クラスタなんてしてないし、どうしたものかと。。。

現象を再確認

  1. 出力されるExceptionは上記2つ
  2. 作業し続けるとエラーは出ずに、30分以上放置してから再度画面を触るとエラーが発生
  3. POST時のみ
  4. でない場合もある

解決方法


IISのアプリケーションプールを「DefaultAppPool」から「Classic .NET AppPool」に変更する





解決に至るまで

  • MAC検証無効でよくね?

検証エラーのViewState受け入れちゃダメでしょ、とつっこまれこの手は使えず
チナミニ、下記みたいな注意もあるので、これは安易に手をつけなくて良かったかもしれない。

重要 : 問題の診断に役立てるときにだけ、ビューステートの MAC 機能をオフにしてください。ビューステートの MAC をオフにしたままにして問題を回避しないでください。そうした場合は、セキュリティ ホールをもたらす可能性があります。詳細については、以下の MSDN Web サイトを参照してください。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnaspp/htm/SecNetch08.asp

  • 時間が立つとでるエラーだから、クッキーやらアイドルセッションやらの時間延ばせば。。。

意味無かった。。。

  • formタグにactionとかあるんじゃ

ソース見たけどそんなものは無かった

終わってみて

なんかすごい時間掛けて調べた割りに、やってみれることは少なかった。
このエラーがでて困っている人がいたら。


まずはここをみて切り分けてみたり

@IT:.NETエンタープライズWebアプリケーション開発技術大全 Webアプリケーションの状態管理
クラスタならこの辺がんばるらしいし
(僕はクラスタでは無いのでろくに見てないけど)

何?このエラー ( ホームページ ) - とあるプログラマーのグチ - Yahoo!ブログ
formタグにactionとか書いてないか見直してみたり


それでも直らないなら、アプリケーションプール変えて見るといいかもね