Да, есть миллион вопросов и тем по этой конкретной ошибке, с множеством хорошо задокументированных решений, которые я обязательно попробую. Но сначала я хочу понять проблему для моей конкретной ситуации / среды.
В моей ситуации эта ошибка кажется совершенно случайной. Я буду неделями не видеть его, а потом однажды я войду на свой сайт и получу сообщение об ошибке. Обновите страницу, войдите снова, и никаких проблем. В течение этих периодов между инцидентами с веб-сервером ничего особенного не происходило.
И еще одна вещь, ошибка говорит: «Если это приложение размещено на веб-ферме или кластере ...», но это не так. Это всего лишь один-единственный 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