ASP.NET Проверка MAC-адреса состояния представления не удалась

У меня есть listView, чтобы показать список данных. Все было хорошо, и неожиданно мы получили сообщение об ошибке ниже:

Проверка MAC представления состояния не удалась. Если это приложение размещено на веб-ферме или в кластере, убедитесь, что в конфигурации указан один и тот же ключ validationKey и алгоритм проверки. Автогенерация не может использоваться в кластере. Недопустимое состояние представления. Клиентский IP... Пользователь-агент: Mozilla/4.0 (совместимо; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3) ViewState:

Может кто-нибудь, пожалуйста, помогите мне, как решить эту проблему. Обратите внимание: 1. Наш IIS-сервер является автономным, а не фермерским хозяйством.

Обновление: ListView имеет гиперссылку на записи, по которым пользователи могут щелкнуть. Спасибо, куча.

4 ответа

Решение

Возможно, что IIS переработал ваше приложение, и поэтому вы получаете новые ключи для состояния сеанса / просмотра. Чтобы облегчить это, добавьте статический ключ компьютера в web.config.

Создайте ключ из http://www.eggheadcafe.com/articles/GenerateMachineKey/GenerateMachineKey.aspx

И поместите ключи в ваш пример web.config, как показано ниже

<machineKey
validationKey="56AB7132992003EE87F74AE4D9675D65EED8018D3528C0B8874905B51940DEAF6B85F1D922D19AB8F69781B2326A2F978A064708822FD8C54ED74CADF8592E17"
decryptionKey="A69D80B92A16DFE1698DFE86D4CED630FA56D7C1661C8D05744449889B88E8DC"
validation="SHA1" decryption="AES" />

<machineKey> следует положить внутрь <system.web> раздел.

Я думаю проблема в том Different keys across postback, поэтому вам нужно сгенерировать новые ключи шифрования.

Из кода проекта:

ASP.NET использует два ключа для шифрования, дешифрования и проверки данных в ViewState, билетах проверки подлинности с помощью форм и данных сеанса вне процесса. Ключ decryptionKey используется для шифрования и дешифрования билетов проверки подлинности и зашифрованной информации ViewState. ValidationKey используется для проверки ViewState и обеспечения того, что он не был подделан, а также для генерации уникальных идентификаторов сеанса для конкретного приложения для хранения сеанса вне процесса. Вы можете столкнуться с проблемами, если ключ меняется между постбэками.


Хорошая статья, как это сделать здесь, здесь, здесь и здесь.

В общем случае при переходе в производственную среду необходимо учитывать некоторые вопросы.

Хорошая статья об этом здесь.

Не зная специфики вашего приложения, это может произойти, если страница будет отправлена ​​до полной загрузки. Вы можете обойти, используя javascript, чтобы предотвратить постбэки / представления до полной загрузки страницы. Также попробуйте уменьшить размер страницы, если это возможно. Отключите viewstate для любых элементов управления, которые вы не используете.

Это может произойти в другом сценарии, когда перезапуск пула происходит до завершения выполнения команды Sql, когда ваше приложение обрабатывает большой объем данных (такой тип генерации отчетов.. и т. Д.) . Проверьте пул приложений вашего приложения и увеличьте интервал переработки.

Это может помочь вам:

<%@ Page EnableViewStateMac="false" Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

Заметка EnableViewStateMac="false"

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