質問

ASP.NETでのこの例外の原因は何ですか?明らかにビューステートの例外ですが、例外をスローしているページ(ボタンとナビゲーションリンクを備えた単純な2つのTextBoxフォーム)でエラーを再現することはできません。

FWIW、Webファームを実行していません。

例外

  

エラーメッセージ:検証できません   データ。

     

エラーソース:System.Web

     

エラーターゲットサイト:Byte []   GetDecodedData(Byte []、Byte []、Int32、   Int32、Int32 ByRef)

投稿データ

  

VIEWSTATE:

     

/ wEPDwULLTE4NTUyODcyMTFkZF96FHxDUAHIY3NOAMRJYZ + CKsnB

     

イベント検証:

     

/ wEWBAK + 8ZzHAgKOhZRcApDF79ECAoLch4YMeQ2ayv / Gi76znHooiRyBFrWtwyg =

例外スタックトレース

   at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
   at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
   at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
   at System.Web.UI.HiddenFieldPageStatePersister.Load()
   at System.Web.UI.Page.LoadPageStateFromPersistenceMedium()
   at System.Web.UI.Page.LoadAllState()
   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.default_aspx.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

〜ウィリアム・ライリー・ランド

役に立ちましたか?

解決

このエラーの原因として最も可能性が高いのは、すべてのビューステートが読み込まれる前にポストバックが停止した場合(ユーザーが[停止]または[戻る]ボタンを押す)、ビューステートが検証に失敗してエラーをスローすることです。

その他の潜在的な原因:

  • ビューステートが生成されてからユーザーがサーバーにポストバックするまでの間のアプリケーションプールのリサイクル(可能性は低い)。
  • machineKeysが同期されないWebファーム(問題ではありません)。

更新:この問題に関するMicrosoftの記事。上記に加えて、彼らは2つの他の潜在的な原因を示唆しています:

  • ファイアウォール/アンチウイルスソフトウェアによるビューステートの変更
  • あるaspxページから別のページへの投稿。

他のヒント

.NET 3.5 SP1では、 RenderAllHiddenFieldsAtTopOfForm プロパティがPagesSection構成に追加されました。

Web.config

<configuration>

    <system.web>

        <pages renderAllHiddenFieldsAtTopOfForm="true"></pages>

    </system.web>

</configuration>

興味深いことに、これのデフォルト値はtrueです。つまり、本質的に、.NET 3.5 SP1を使用している場合、ViewStateはフォームの最上部(ページの残りの部分が読み込まれる前)に自動的にレンダリングされるため、取得しているViewStateエラーがなくなります。

特定のバージョンのSafari 3で問題が発生しました。私の解決策は、ViewStateをフォームの最上部に移動することでした(Pageクラスを拡張し、3.5 SP1以前または.Net 3.5のRenderメソッドを上書きしました) SP1以降はデフォルトでこれを行います)、ViewStateを1つのモンスターファイルの代わりにいくつかの異なるフィールドに分割します。 ASP.NET 2.0のViewStateチャンキング(maxPageStateFieldLength)

この無料のオンラインツール: http://aspnetresources.com/tools/machineKey はmachineKey要素を生成しますweb.configファイルのsystem.web要素の下。 生成されるものの例を次に示します。

<machineKey validationKey="1619AB2FDEE6B943AD5D31DD68B7EBDAB32682A5891481D9403A6A55C4F91A340131CB4F4AD26A686DF5911A6C05CAC89307663656B62BE304EA66605156E9B5" decryptionKey="C9D165260E6A697B2993D45E05BD64386445DE01031B790A60F229F6A2656ECF" validation="SHA1" decryption="AES" />

web.configでこれを確認すると、エラー自体が突然意味をなします。 表示されるエラーには

と表示されます
  

&quot;構成が同じことを指定していることを確認する   validationKeyと検証アルゴリズム&quot;。

このmachineKey要素を見ると、突然それが何について話しているのかがわかります。


「ハードコーディング」による; web.configのこの値、asp.netがビューステートのシリアル化とシリアル化解除に使用するキーは、サーバーファーム内のどのサーバーがそれを取得しても同じままです。暗号化は「ポータブル」になり、ビューステートは「ポータブル」になります。

また、何らかの理由で「忘れる」場合、非常に同じサーバー(ファーム内ではない)にこの問題があるのではないかと推測しています。消去されたすべてのレベルでリセットされたため、キーがありました。おそらく、アイドル期間後にこのエラーが表示され、「古い」を使用しようとする理由です。ページ。

  

&quot;すべてのビューステートがロードされる前にポストバックが停止します&quot;

この問題は以前にもありましたが、これが原因でした。

最初にViewStateMacプロパティを無効にして( page ディレクティブの enableViewStateMac =&quot; false&quot; )解決しましたが、これは問題の真の解決策ではなく、データの整合性を脅かす可能性があります。最終的には、ページが完全に読み込まれるまで送信ボタンを無効にし、一部のコントロールで無効にすることでビューステートのサイズをトリミングすることで解決しました。

この問題の根源をウェブサイトで見つけて、ようやく解決することができました。これはあなたの質問に対する直接的な答えではありませんが、この小さな情報を共有したかったのです。

過去にすべてを試してみました(上記のJeffaxeによって提案された解決策を含む)が、結果はなく、 enableViewStateMac =&quot; false&quot; を設定したくありませんでした)これは問題を隠しているだけなので、私のページに。

私の場合、問題の原因は何ですか?この問題は、私のWebサイトの特定のページで Intelligencia.UrlRewriter (バージョン2.0 RC 1ビルド6)モジュールを使用したことが原因でした。いくつかのSEOフレンドリーリンクを使用していたため、ViewStateの検証エラーが発生していました。 「通常」を使用した場合リンク(SEOに優しいリンクの代わりに)問題は消えました!

問題を数回再現して、誤報ではないことを確認しました(ASP.NET 3.5を使用しています)。

上記のモジュールを使用していない人もいることを知っていますが、それでもこのエラーが発生します。これは、原因が別のものであることを意味しています。少なくとも、この経験を共有することは一部の人に役立つかもしれません。

アクション属性のないページにフォームタグを設定したときにこのエラーが発生し、コードビハインドでフォームのアクション属性を&quot; Action.aspx&quot;に変更しました。

そしてJavaScriptで、フォームを送信しました(theForm.submit();)

私の場合、これはセキュリティ上の問題であり、ページに既に設定されている場合、これを変更できないと思います...

これがだれにも役立つかどうかはわかりませんが、私の解決策は、クッキーが渡されるようにwebconfigでmachineKeyを除外することでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top