Навигация

Итоги года

Другие ссылки


Реклама

Счётчики


The View State is invalid for this page and might be corrupted

28.09.2006 Четверг 17:48

Софт

ASP.Net

Симптомы

Пользователь смотрит некую ASP.Net-страницу. Затем не закрывая браузер надолго забывает о ней. Затем кликает линк на этой странице, который вызывает postback. И видит следующую ошибку:

[HttpException (0x80004005): The View State is invalid for this page and
might be corrupted.]
System.Web.UI.Page.LoadPageStateFromPersistenceMedium()
System.Web.UI.Page.LoadPageViewState()
System.Web.UI.Page.ProcessRequestMain()


Причина

.Net кодирует ViewState, для того, чтобы злобный хацкер с ним ничего не мог сделать. Ключ для кодирования генерируется средой автоматически. Судя по всему этот ключ может меняться если пользовательская сессия закончилась (что случается если пользователь долго ничего не делает со страницей). Кроме того, в случае Web Farm, этот ключ разный на разных серверах, входящих в состав Web Farm. Поэтому postback, пришедший не на тот сервер, на котором был сгенерирован ключ, которым закодирован Viewstate, завершится приведённой выше ошибкой.

Решение

Чтобы ключ был один и навсегда, надо его явно прописать. Это делается в файле web.config:

<configuration>
<system.web>
<machineKey validationKey="A_128_HEX_DIGITS_VALUE"
decryptionKey="A_48_HEX_DIGITS_VALUE"
validation='SHA1'/>
</system.web>
</configuration>
Для Web Farm надо прописать одинаковые ключи на всех машинах.