В ASP.Net я иногда получаю следующую ошибку - Ошибка проверки Viewstate. Причина: предоставленное представление состояния провалило проверку целостности - PullRequest
6 голосов
/ 16 марта 2009

Справочная информация: я разработал веб-приложение в ASP.Net 3.5 в C # Он работает отлично, но теперь несколько пользователей сообщили, что иногда они получают ошибку. Я пытался повторить ошибку, но это было трудно. Однажды, когда я оставил приложение в покое, я вернулся позже и попытался переместить его, и оно ошиблось. Я думаю, это как-то связано с таймаутом, но я использую состояние просмотра.

Есть идеи? Когда я смотрю на eventLog, я вижу следующую запись об ошибке.

Спасибо за вашу помощь и идеи!

John


Мой журнал событий содержит следующие ошибки:

Код события: 4005

Сообщение о событии: проверка подлинности с помощью форм для запроса не удалась. Причина: срок действия билета истек.

Время события: 14/03/2008 13:19:26

Время события (UTC): 14/03/2008 13:19:26

Код события: d9f0333c2eed46e0b0207da69d2ea70e

Последовательность событий: 154

Событие наступило: 5

Детальный код события: 50202


Код события: 3005

Сообщение о событии: произошло необработанное исключение.

Время события: 12.03.2009 7:49:59

Время события (UTC): 12.03.2009 11:49:59

Код события: 590ac0f6ad734d988e9e02f0fb7800eb

Последовательность событий: 52

Событие произошло: 1

Детальный код события: 0

Информация о приложении:

Application domain: /LM/W3SVC/32/ROOT-1-128813294498061103 

Trust level: Full 

Application Virtual Path: / 

Application Path: C:\Home\LocalUser\ucpga\Web\ 

Machine name: 169349-WEB2 

Информация о процессе:

Process ID: 6912 

Process name: w3wp.exe 

Account name: NT AUTHORITY\NETWORK SERVICE 

Вот последняя ошибка:

Код события: 4009 Сообщение о событии: Ошибка проверки состояния. Причина: предоставленное состояние просмотра не прошло проверку целостности. Время события: 15.03.2009 10:26:27 Время события (UTC): 16.03.2009 2:26:27 Код события: 3b5be134005e49c3b40400bcaa5cb48d Последовательность событий: 56 Возникновение события: 1 Код детали события: 50203

Информация о приложении: Домен приложения: / LM / W3SVC / 32 / ROOT-1-128816433841748972 Уровень доверия: Полный Виртуальный путь к приложению: / Путь к приложению: C: \ Home \ LocalUser \ ucpga \ Web \ Название машины: 169349-WEB2

Информация о процессе: Идентификатор процесса: 8892 Имя процесса: w3wp.exe Имя учетной записи: NT AUTHORITY \ NETWORK SERVICE

Запрос информации: URL запроса: https://hr.ucpga.org:443/application.aspx Путь запроса: /application.aspx Адрес хоста пользователя: 74.160.64.222 Пользователь:
Аутентифицировано: Ложь Тип аутентификации:
Имя учетной записи потока: 169349-WEB2 \ ucpga

ViewStateException информация: Сообщение об исключении: Неверное состояние просмотра. IP-адрес клиента: 74.160.64.222 Порт: 1251 User-Agent: Mozilla / 4.0 (совместимо; MSIE 7.0; Windows NT 5.1; GTB5; .NET CLR 1.1.4322; InfoPath.1)

Ответы [ 4 ]

10 голосов
/ 16 марта 2009

Эта проблема часто может быть вызвана наличием автоматически сгенерированных ключей <machineKey /> в файле machine.config вашего сервера. Каждый раз, когда ваше приложение запускается заново, оно генерирует новые ключи. Это лишает законной силы любое существующее зашифрованное состояние представления или формирует билеты проверки подлинности.

Попробуйте установить <machineKey /> validationKey и decryptionKey на фиксированные значения. Смотрите следующую ссылку для получения дополнительной информации:

Как: настроить MachineKey в ASP.NET 2.0 (MSDN)

2 голосов
/ 16 марта 2009

Я сильно сомневаюсь, имеет ли эта проблема какое-либо отношение к Viewstate. Это больше связано с состоянием сеанса и файлами cookie аутентификации.

Ваше приложение работает в веб-ферме / саду? Если это так, вы должны взглянуть на эту статью .

Если нет, то эта ошибка обычно возникает, если время ожидания FormsAuthenticationTicket меньше, чем время ожидания сеанса. Происходит следующее: срок действия билета Auth истекает раньше, чем сеанс пользователя, и следующий запрос не может быть аутентифицирован.

1 голос
/ 15 июня 2011

У меня тоже была эта ошибка ....

Если вы посмотрите на ошибку, скорее всего это зашифрованная строка запроса URL. В результате получается, что строка URL-адреса, сгенерированная webresource.axd, имеет идентификаторы, которые были зашифрованы с использованием настройки машинного ключа. Срок их действия истекает, и если у вас есть страница, на которой вы находитесь, а затем попытайтесь отправить ее с использованием зашифрованной строки, событие с кодом 1316 или 4009 будет запущено. Вы, вероятно, можете зафиксировать это исключение в событии Application_Error и проверить, было ли вызвано исключение CryptographicException.

1 голос
/ 16 марта 2009

Это похоже на проблему аутентификации. Вы, вероятно, установили тайм-аут в билете аутентификации, срок действия которого истекает. Если вы используете скользящий таймаут, то каждый раз, когда вы подключаетесь к серверу, билет будет обновляться. Если вы этого не сделаете, срок действия ваших билетов истечет, и вам придется заняться этим делом.


Edit:

Вы можете проверить эту статью support , чтобы узнать, относится ли она к вам.

Также вы можете проверить это средство просмотра состояния представления может помочь вам определить, является ли состояние представления недействительным.

Вот еще один хороший пост от инженера Microsoft Escalation

...