Я думаю, что испробовал все стандартные ответы на эту проблему, и я знаю, что прочитал сотни вопросов и сообщений об этой проблеме, но ни один из них не решил ее и не пролил свет на причину есть в моем сценарии. (Я пропал на 5 часов и не ближе :-()
У меня есть веб-ферма из 2 серверов.
Я установил ключ машины и ключ проверки в machine.config на обеих машинах.
Шифрование: SHA1, дешифрование: AES — это значения по умолчанию, может помочь их изменить?
Я проверил, что никакие другие файлы конфигурации в цепочке (web.cfg, apphost и т. д.) не имеют настройки для этих значений.
Я добавил страницу на сайт (на основе этого SO), который возвращает значения ключа компьютера обратно и проверяет, что они одинаковы для запросов к обеим компьютерам и соответствуют значениям, указанным в файле .config компьютера.
Состояние сеанса на стороне сервера находится на общем сервере состояний, я проверил, что идентификатор сеанса остается постоянным между запросами к 2 серверам.
Я убедился, что страница полностью загружена, а скрытое поле __EVENTVALIDATION было отображено на странице до начала публикации. Размер состояния просмотра не так уж и плох — 7,64 КБ.
Когда страница обрабатывается из запроса на сервер 1, а затем отправляется обратно на сервер 2, я получаю ужасное...
Error Message:
Unable to validate data.
at System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Int32& dataLength)
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) HttpApplication.RecordError => HttpApplication.RaiseOnError => global_asax.Application_Error
Пост запускается стандартной, настоящей кнопкой ссылки asp, на странице нет ajax.
Любая помощь будет принята с благодарностью.
Установка enableViewStateMAC = false не является решением :-)