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"