トップ回答者
System.Web.UI.ViewStateException: 無効な viewstate です。のエラーが発生する

質問
-
こんにちは。アべです。
不定期ですが、Webシステムで、
「System.Web.UI.ViewStateException: 無効な viewstate です。」
が発生して困っております。
このエラーの原因は何なのでしょうか?
または、このエラー原因を調べる方法はあるのでしょうか?
1)システム構成
Windows 2003 Server
.NET Framework 2.02)不定期:300ユーザが使用して週に一回程度
3)エラーログ
2009/07/28 10:41:50
Error in: http://xxxxxxxx/xxxxxxx/xxxxxxxxx/xxxxxxxxxxxx.aspx ←マスクした
System.Web.HttpException: クライアントが切断されました。 ---> System.Web.UI.ViewStateException: 無効な viewstate です。
Client IP: 123.123.123.123 ←マスクした
Port: 60595
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)
ViewState: /wEPDwULLTEyODM2MzY4MjcPZBYCZg9kFgICAw9kFggCAw9kFgQCAQ9kFgJmD2QWAgIBDw8WAh4EVGV4dAUwJm5ic3A7Jm5ic3A744CA44Od44Kk44Oz44OI5Lqk5o+b44CAJm5ic3A7Jm5ic3A7ZGQCBQ9kFgJmD2QWAgIBDw8WBh8ABRXmk43kvZzjg57jg4vjg6XjgqLjg6seBlRhcmdldAUGX2JsYW5rHgtOYXZpZ2F0ZVVybAUnfi9NYW51YWwvT1BTX01hbnVhbC5odG0jXzA5X1BvaW50Q2hhbmdlZGQCBQ9kFgICAQ9kFgZmD2QWDAILD2QWAmYPZBYIAgEPEA9kFgIeB29uZm9jdXMFDk9uRm9jdXModGhpcyk7ZBYAZAIDDw8WAh8ABRHjiLHnpo/nn6XllYbkvJogIGRkAgcPDxYCHwAFAzIzMWRkAg0PDxYCHwAFAjE1ZGQCDQ8PFgYeCENzc0NsYXNzBQRub25lHwBlHgRfIVNCAgJkZAIPDw9kFgQfAwUOT25Gb2N1cyh0aGlzKTseC29ubW91c2Vkb3duBV90cnl7JGdldCgnY3RsMDBfX19MQVNUQ0xJQ0snKS52YWx1ZT10aGlzLmlkO30gY2F0Y2goZSkgeydvbm1vdXNlZG93biBlcnI6JyArIGRlYnVnKGUubWVzc2FnZSk7... ---> System.FormatException: Base-64 文字配列の長さが無効です。
場所 System.Convert.FromBase64String(String s)
場所 System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
場所 System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
場所 System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
場所 System.Web.UI.HiddenFieldPageStatePersister.Load()
--- 内部例外スタック トレースの終わり ---
--- 内部例外スタック トレースの終わり ---
場所 System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
場所 System.Web.UI.HiddenFieldPageStatePersister.Load()
場所 System.Web.UI.Page.LoadPageStateFromPersistenceMedium()
場所 System.Web.UI.Page.LoadAllState()
場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
場所 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
場所 System.Web.UI.Page.ProcessRequest()
場所 System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
場所 System.Web.UI.Page.ProcessRequest(HttpContext context)
場所 ASP.pointchange_pointchange_aspx.ProcessRequest(HttpContext context) 場所 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\staging\529ad9bb\f1915619\App_Web_x3jj35la.0.cs:行 0
場所 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
場所 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)3)こちらで調べた事
↓このページにたどりつくのですが、
いまいち原因と回避策が把握できないので、再現が出来ていないです。
http://d.hatena.ne.jp/fyts/20080530/exception4)私の対応案
もう、めったに出ないから、このエラーが出たら致命的エラーの運用フローとは
せずに警告エラー(ログに残してSE対応なし)のフローで扱おうかと考えております。
しかし、原因が分からないと本当にそれでいいのかが分からないため、投稿させてもらいました。以上
回答
-
ViewStateが一部欠けているのかもしれません。MaxPageStateFieldLengthプロパティを調整してみて下さい。
Page.MaxPageStateFieldLength プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.ui.page.maxpagestatefieldlength(VS.80).aspx
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク 高橋 春樹 2009年10月5日 9:03
-
問題はワーカー プロセスのリサイクルによって発生しているのではないかと思います。以下の
ページの説明が参考になるかもしれません。断続的な ASP.NET Web の 無効 Viewstate エラー は、ページングします。
http://support.microsoft.com/kb/555353/jaASP.NET のエラー "ViewState は無効です" のトラブルシューティング
http://support.microsoft.com/kb/829743/ja- 回答としてマーク 高橋 春樹 2009年10月5日 9:03
-
以前に同様の事象があったため社内で調査をしたことがありました。推測でしかないですが、サーバー側にViewStateが完全な状態で届いていないからのようです。エラーメッセージそのままですね < Base-64 文字配列の長さが無効です。以下、検証した例です。100個程度のListItemを保持するDropDownListを作成しAutoPostBack = trueとします。この状態でDropDownListをアクティブにし、マウスのスクロールリングを一気に動かすと、50回に1回程度の頻度で上記エラーが表示されました。#指の痙攣を利用して高速スクロールを2回に分割すると起こりやすかったです(笑)#一瞬間を置いてサーバーにSubmitを受付させるのがコツか弊社では500ユーザー程度が利用していますが、1日に1~3回程度出力されています。実際、ユーザーの方でも同様のオペレーションで発生しているかは不明ですが、・毎回発生する性格のものであれば必ず連絡が入る運用になっている・特定のページだけでなく他のページでも発生している・頻度がそれほど高くない以上のことから「ユーザーから障害報告が入ったらあらためて調査しよう」ということで現状では放置しています。
- 回答としてマーク 高橋 春樹 2009年10月5日 9:03
すべての返信
-
ViewStateが一部欠けているのかもしれません。MaxPageStateFieldLengthプロパティを調整してみて下さい。
Page.MaxPageStateFieldLength プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.ui.page.maxpagestatefieldlength(VS.80).aspx
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク 高橋 春樹 2009年10月5日 9:03
-
問題はワーカー プロセスのリサイクルによって発生しているのではないかと思います。以下の
ページの説明が参考になるかもしれません。断続的な ASP.NET Web の 無効 Viewstate エラー は、ページングします。
http://support.microsoft.com/kb/555353/jaASP.NET のエラー "ViewState は無効です" のトラブルシューティング
http://support.microsoft.com/kb/829743/ja- 回答としてマーク 高橋 春樹 2009年10月5日 9:03
-
以前に同様の事象があったため社内で調査をしたことがありました。推測でしかないですが、サーバー側にViewStateが完全な状態で届いていないからのようです。エラーメッセージそのままですね < Base-64 文字配列の長さが無効です。以下、検証した例です。100個程度のListItemを保持するDropDownListを作成しAutoPostBack = trueとします。この状態でDropDownListをアクティブにし、マウスのスクロールリングを一気に動かすと、50回に1回程度の頻度で上記エラーが表示されました。#指の痙攣を利用して高速スクロールを2回に分割すると起こりやすかったです(笑)#一瞬間を置いてサーバーにSubmitを受付させるのがコツか弊社では500ユーザー程度が利用していますが、1日に1~3回程度出力されています。実際、ユーザーの方でも同様のオペレーションで発生しているかは不明ですが、・毎回発生する性格のものであれば必ず連絡が入る運用になっている・特定のページだけでなく他のページでも発生している・頻度がそれほど高くない以上のことから「ユーザーから障害報告が入ったらあらためて調査しよう」ということで現状では放置しています。
- 回答としてマーク 高橋 春樹 2009年10月5日 9:03
-
こんにちは、フォーラムオペレーターの高橋春樹です。
trapemiyaさん、Jittaさん、SurferOnWwwさん、Matz_asdfghjklさん
こんにちは、ご投稿ありがとうございました。kiyo7447R2 さん、はじめまして。
MSDNフォーラムのご利用有難うございます。
皆さんからアドバイスを頂いたと思うのですが、問題解決に繋がりましたでしょうか?300ユーザが使用して週に一回程度しか発生しないということから、Matz_asdfghjklさんの
おっしゃっているように、サーバー側にViewStateが完全な状態で届かなかった為に発生した問題なのかもしれません。
この現象はクライアントが、Postする途中にブラウザを閉じたときにも発生するようです。お時間がありましたら、Matz_asdfghjklさんが試された方法で、再現して頂ければと思います。
今回、trapemiyaさん、Jittaさん、SurferOnWwwさん、Matz_asdfghjklさんの投稿が有用な情報だと思いましたので、
勝手ながら、回答マークを付けさせてもらいました。今後ともMSDNフォーラムを宜しくお願いします(^-^)
マイクロソフト株式会社 フォーラム オペレーター 高橋春樹