[解決済み] asp.netのページでInvalid viewstateエラーが発生する。
質問
このウェブページは、簡単な登録型のページです。各ユーザーは約200のフィールドに入力する必要があります。1つの親テーブルと6つの子テーブルがあります。各テーブルの情報は、別々のAJAXタブパネルに表示され、詳細は各タブナビゲーションに保存されます。私はイントラネットでウェブサイトをホストしており、同時に100人のユーザーによって詳細が入力されました。当初はすべてが順調に進み、入力内容はデータベースに保存されましたが、しばらくするとAJAXの読み込み画像が表示され、ウェブサイトの動作が非常に遅くなったように見えました。ユーザーの詳細がデータベースに保存されませんでした。最終的に、Firefoxのブラウザが何人かでクラッシュし、何人かはアプリケーションからログアウトすることもできませんでした。ウェブサイトがハングアップしてしまったのです 私はIISもリセットし、すべてが数分続いたが、同じ問題が再び始まった!私は、この問題を解決することができました。 私はNHibernateフレームワーク、AJAX、ASP.Net 4.0をフロントエンドとして、SQLサーバー2008をバックエンドとして使用しました。
以下は、ログファイルでのエラーの詳細です。
2014-08-11 10:05:40,953 [22] INFO ASP.global_asax servername : -
************************* 11/08/2014 10:05 **************************** IP Address: xx.x.xxx.xx Exception Type: System.Web.HttpException Exception: Request timed out. Source:
**************************************************************************
2014-08-11 10:05:40,984 [39] INFO ASP.global_asax servername : -
************************* 11/08/2014 10:05 ****************************`
IP Address: xx.x.xxx.xx
Exception Type: System.Web.HttpException
Exception: The client disconnected.
Source: System.Web
Stack Trace:
at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
at System.Web.UI.ViewStateException.ThrowViewStateError(Exception inner, String persistedState)
at System.Web.UI.ClientScriptManager.EnsureEventValidationFieldLoaded()
at System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument)
at System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument)
at System.Web.UI.WebControls.DropDownList.LoadPostData(String postDataKey, NameValueCollection postCollection)
at System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection)
at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.ui_shape_profilereg_aspx.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
**************************************************************************
Inner Exception Type: System.Web.UI.ViewStateException
Inner Exception: Invalid viewstate.
Client IP: xx.x.xx.xx
Port: 44853
Referer: mypageurl.aspx
Path: /xx/xxxx/xxxxx.aspx
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20100101 Firefox/17.0
ViewState: /wEW4xwCvIuN0AIC1tvizQkCq67tpAgC76DRtAcCx+CW8AkCub6h1gwCgL6h1gwC2tGLOAKy2oaCCQLvkqjEDgKhnYMvArnixL8OApuuotUNAvL6+LQMAr6MpOoPArqKsKgDAvHcqZUKAqz10osPAu71uZENAqOa+OUDAtH844kHApLejoMIApLe0pAOAqze2pAOAqze0pAOAqu34bMNAtGFvd4JAq3e2pAOAq3e0pAOAtKFvd4JAqu3pa0NAtGF4dsJAsyRw5MHAsyRu9kFAqu35bMNAtGFod4JAsyRx5MHAsyRv9kFAof0kuQOApj0kuQOAoibuIoCAo/tyqYKAvnF+KIIAunaxagHAuu0gK8OAr+m5s0MAp3r6bkJAp/A0coMAs+s/tsNAseN/JQOApaT7OIDAr/1vroLArWhqYQMAqDH34kLArCo9ecHAsuo0fkHAtCo0fkHAqa0zecNApe1zIMOAofa5u0CApja5u0CApna5u0CApra5u0CApva5u0CApza5u0CAp3a5u0CAp7a5u0CApbxu6IGAoaekcwKApmekcwKApiekcwKApuekcwKApqekcwKAp2ekcwKApyekcwKAp+ekcwKAo6ekcwKAoGekcwKApme0c8KApme3c8KApme2c8KApme5c8KApme4c8KApme7c8KApme6c8KApme9c8KApmescwKApmevcwKApie0c8KApie3c8KApie2c8KApie5c8KApie4c8KApie7c8KApie6c8KApie9c8KApie...
Inner Source:
**************************************************************************
`2014-08-11 10:05:54,875 [82] INFO ASP.global_asax servername : -
************************* 11/08/2014 10:05 ****************************
IP Address: xx.x.xxx.xx
Exception Type: System.Web.HttpException
Exception: Request timed out.
Source:
**************************************************************************
このようなエラーは、ログで繰り返し発見されます。
データベースサイズを大きくしてみましたが、その後のテストはしていません。
完全に行き詰っています! どうすればいいか教えてください。
解決方法は?
私が試した解決策は次のとおりです。
-
特定のマシンキーを生成し、enableViewstateMac="False"を追加して、以下のように指定する。 記事 . もう一つの有用な記事は、次のように紹介されています。 リンク
-
ページ内のコントロールの数が多い場合(約200個のコントロールがある)、maxpagestatefieldlengthプロパティをより小さな値に設定する必要があります。このフィールドは、クライアントブラウザに送信されるビュー状態が複数の隠しフィールドに分割され、各フィールドの値がMaxPageStateFieldLengthプロパティで指定したサイズより小さくなっていることを示します。ここでは、maxpagestatefieldlength ="40"を指定しています。
-
このように指定されたビューの状態の圧縮を行いました。 記事 . このコードは、ビューステートを圧縮し、その結果、低速のインターネット接続でもウェブサイトが正常に動作するようになります。
-
web.config ファイルに追加したタグは次のとおりです。 enableEventValidation="false" viewStateEncryptionMode="Never" enableViewStateMac="false" です。セキュリティ上の理由から、enableViewStateMacはtrueに設定されていることに注意してください。MACは、クライアントがViewStateの内容を悪意を持って改ざんできないことを保証するものです。(これを保証するには、暗号化だけでは不十分であり、MACが必要です)。 EnableViewStateMac プロパティは、'false' に設定する正当な理由がないため、製品の将来のバージョンで削除される予定です。
-
もう1つの重要な間違いは、アプリケーション変数を使って、エラーの詳細をログに保存し、エラーページにも表示したことです。アプリケーション変数を使用したため、1つのクライアントでエラーが発生すると、残りのクライアントでアプリケーションがハングアップしてしまいます。私たちは、このアプリケーション変数を削除し、エラー処理に別のアプローチを使用しました。私たちが使用したエラー処理方法は、次のものから取得しました。 記事
-
テスト中に1つの問題に直面しました。エラーは "Maximum request length exceeded" で、これは以下の提案を実行することで修正されました。 記事
-
私たちのウェブサイトでは、更新パネルを使用し、その中にAJAXタブコンテナが追加されています。現在、その更新パネルを削除し、各タブパネル内に個別の更新パネルを配置しています。
-
Invalid Viewstate"エラーの主な理由は、ViewStateがquot;large"になったときに例外が発生し、前のリクエストが完了する前にユーザーがボタンをクリックした場合です。私たちの場合、ポストバックはajaxを使用しているので、ViewStateがサーバーに送信されている間、ブラウザは応答を停止しないため、これは非常に簡単に発生します。このコントロールをクリックすると、何度も何度も例外が発生します。この概念は、次のように説明されています。 記事 が、そのリンク先ではちゃんと実行可能な解決策を得ることができませんでした
50人の同時接続ユーザーでテストしましたが、エラーは発生しませんでした! このエラーに直面しているすべての人のために役立つことを願っています。
関連
-
[解決済み】ASP.NETとWeb Tools 2015のインストール後、Visual Studioエラー「オブジェクトの参照がオブジェクトのインスタンスに設定されていません」が発生する。
-
[解決済み] レイアウトページ"~/Views/Shared/_Layout.cshtml "では、以下のセクションは定義されていますが、レンダリングは行われていません。"スクリプト"
-
[解決済み] リモートホストが接続を閉じました。エラーコードは0x800704CDです。
-
[解決済み] targetFramework' 属性が認識されません。属性名は大文字と小文字を区別することに注意してください
-
[解決済み] asp.netのルーティングの問題
-
[解決済み] コードビハインドでASP.NetページのURLを取得する [重複]。
-
[解決済み] SQL ServerでPDFファイルをバイナリオブジェクトとして保存すること、イエスかノーか?
-
[解決済み] ASP.NET Ajaxクライアントサイドフレームワークのロードに失敗しました。
-
ASP.NETでRadioButtonコントロールを使用する
-
[解決済み] Page_Loadの呼び出しとその方法について教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リクエストの最大長を超えました。
-
[解決済み] ファイルまたはアセンブリ 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform' を読み込めませんでした。
-
[解決済み] IIS7.0で「HTTPエラー500.19 - 内部サーバーエラー」を解決するには [終了しました]。
-
[解決済み] "この操作にはIIS統合パイプラインモードが必要です。"
-
[解決済み] System.Web.HttpException: リクエストタイムアウト
-
[解決済み] RSAキーコンテナを開くことができませんでした。
-
ASP.NETでRadioButtonコントロールを使用する
-
[解決済み] Temporary ASP.NET Files」フォルダは何のためにあるのですか?
-
[解決済み] Url.Actionのパラメータ?
-
[解決済み] VB.netで辞書を使うには?