Есть несколько причин, по которым это может произойти:
Автоматически сгенерированные машинные ключи:
Если для пулов приложений по умолчанию установлено время ожидания по умолчанию, равное 20 минутам, и вы используете автоматически сгенерированные ключи проверки и расшифровки, то при каждом запуске пула он будет генерировать новый набор ключей. Это делает недействительным зашифрованное состояние браузера. Вы также обнаружите, что билеты проверки подлинности форм для постоянных билетов также станут недействительными.
Чтобы преодолеть это, установите следующие ключи в фиксированные значения в:
`c:\%systemroot%\microsoft.net\framework\v2.0.50727\CONFIG\machine.config`
Вам необходимо добавить элемент конфигурации <machineKey>
в раздел <system.web>
. Здесь есть довольно хорошая статья, которая объясняет, как это сделать:
Как: настроить MachineKey в ASP.NET 2.0
Прокрутите вниз до раздела " Замечания по развертыванию веб-фермы " и сгенерируйте криптографически случайные ключи.
Если вы используете веб-ферму с балансировкой нагрузки, вам также необходимо установить для машинного ключа каждого сервера одно и то же значение.
Неправильная форма action
значение (3.5SP1):
Существует также случай (публикация 3.5SP1), где, если вы установите для атрибута action
формы ASP.NET значение, отличное от страницы, на которую вы отправляете сообщение, и вы не используете кросс-постбэки, то вы получите ошибка. Но вы увидите это сразу:
Не удалось проверить MAC представления состояния после установки .NET 3.5 SP1
Время / длинные страницы:
Существует также крайний случай для страниц, отображение которых занимает много времени, если страница частично визуализируется и происходит обратная передача:
Ошибка проверки MAC состояния состояния
Root Cause Это исключение появляется, потому что элементы управления используют DataKeyNames
требуют, чтобы Viewstate был зашифрован.
Когда Viewstate зашифрован (по умолчанию
Режим Auto предназначен для шифрования элементов управления
требуют, иначе нет)
добавляет
поле перед закрытием
тег. Но это скрытое поле
возможно, не было оказано
браузер с продолжительными страницами и
если вы делаете постбэк раньше,
браузер инициирует обратную передачу без
это поле (в форме почтового сбора).
Конечным результатом является то, что если это поле
опущено при обратной передаче, страница не
знать, что Viewstate зашифрован и
вызывает вышеупомянутое исключение.
И.Е. страница ожидает полной загрузки
прежде чем сделать обратную передачу.