3

はい、この特定のエラーについては100万の質問とスレッドがあり、十分に文書化された解決策がたくさんあります。これは間違いなく試してみます。しかし、最初に私は私の特定の状況/環境の問題を理解したいと思います。

私の状況では、このエラーは完全にランダムなようです。私はそれを見ずに何週間も行きます、そしていつか私は私のサイトにログインしてエラーを受け取ります。ページを更新し、再度ログインしてください。問題ありません。インシデント間のこれらの期間中、Webサーバーに特に特別なことは何も起こりませんでした。

それは別のことです。エラーには「このアプリケーションがWebファームまたはクラスターによってホストされている場合...」と表示されますが、そうではありません。これは、単一のWindowsServer2008です。

したがって、一般的な解決策は、静的なマシンキーのセットをweb.configファイルに追加することであると理解しています---しかし、なぜこれが一見ランダムに発生するのか、単一のWindowsServer2008上にある私のサイトで発生するのはなぜですかマシーン?

ASP.NET 4を使用していて、私のサイトはIISで実行されているWebアプリケーションです。

エラーメッセージ:

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

スタックトレース:

[ViewStateException: Invalid viewstate. 
    Client IP: ##::##:##:##:##
    Port: ##
    Referer: http://myserver/login.aspx
    Path: /login.aspx
    User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.289 Version/12.01
    ViewState: /wEPDw...6OCX]

[HttpException (0x80004005): Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.]
   System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +235
   System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState) +14
   System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +274
   System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4
   System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +37
   System.Web.UI.HiddenFieldPageStatePersister.Load() +241
   System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +106
   System.Web.UI.Page.LoadAllState() +43
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +8431
   System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +253
   System.Web.UI.Page.ProcessRequest() +78
   System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21
   System.Web.UI.Page.ProcessRequest(HttpContext context) +49
   ASP.login_aspx.ProcessRequest(HttpContext context) +4
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +100
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
4

1 に答える 1

5

ログから、1 つのことを確認することをお勧めします。ユーザーからのパラメーターを、ユーザーがログイン/ログアウトした場合に変更できる Viewstate に接続しましたか? - または、セッションの有効期限が切れているか変更されているなど、その他の理由で変更されています。

このパラメーターは、保存された Viewstate と現在の Viewstate の間で異なる可能性があり、ページが壊れる可能性があります。

たとえば、このコードはそれを行うことができます:

ViewStateUserKey = CurrentUserCookie;

または、これはそのままです:

ViewStateUserKey = User.Identity.Name

この回答もお読みください: https://stackoverflow.com/a/2551810/159270

これは似ています: ViewStateUserKey + 共有ホスティング + ViewStateMac 検証の失敗

そしていくつかの参照: http://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx
http://msdn.microsoft.com/en-us/library/ms972969.aspx

ランダム エラーは、開発者にとって悪夢です。

于 2012-08-20T07:13:25.347 に答える