Почему я только "случайно" получаю сообщение "Ошибка проверки MAC представления состояния" в среде с одним сервером?

Да, есть миллион вопросов и потоков по этой конкретной ошибке со многими хорошо документированными решениями, которые я обязательно попробую. Но сначала я хочу понять проблему для моей конкретной ситуации / среды.

В моей ситуации эта ошибка кажется совершенно случайной. Я буду неделями, не видя этого, тогда однажды я войду в свой сайт и получу ошибку. Обновите страницу, войдите снова, и никаких проблем. В течение этих периодов между инцидентами ничего особенного с веб-сервером не происходило.

И это еще одна вещь, ошибка говорит "Если это приложение размещено на веб-ферме или кластере...", но это не так. Это всего лишь один Windows Server 2008.

Итак, я понимаю, что общее решение состоит в том, чтобы добавить набор статических машинных ключей в файл web.config, но почему это происходит на первый взгляд случайным образом и почему это происходит с моим сайтом, который находится на одном Windows Server 2008 машина?

Я использую ASP.NET 4, и мой сайт представляет собой веб-приложение, работающее на IIS.

Сообщение об ошибке:

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

1 ответ

Из вашего журнала я предлагаю вам проверить одну вещь : вы связали какой-либо параметр от вашего пользователя с Viewstate, который можно изменить, если пользователь вошел в систему / вышел из системы? - или изменить по любой другой причине, например, потому что сеанс истек или изменился.

Этот параметр может отличаться между сохраненным и текущим Viewstate, и это может сломать страницу.

Например, этот код может сделать это:

ViewStateUserKey = CurrentUserCookie;

Или этот как есть:

ViewStateUserKey = User.Identity.Name

Также прочитайте этот ответ: /questions/29091274/cryptographicexception-zapolnenie-yavlyaetsya-nedopustimyim-i-ne-mozhet-byit-udaleno-a-proverka-sostoyaniya-predstavleniya-mac-ne-vyipolnena/29091290#29091290

Это похоже: ViewStateUserKey + общий хостинг + ошибка проверки ViewStateMac

И некоторые ссылки: http://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx
http://msdn.microsoft.com/en-us/library/ms972969.aspx

Случайные ошибки - это кошмар любого разработчика.

Другие вопросы по тегам