Итак, у меня есть что-то странное, и я не могу точно определить, что именно вызывает его. Мой asp.net проект жить с состоянием сеанса на двух производственных серверах, которые синхронизируются с помощью следующей команды:Не удалось выполнить проверку MAC-адреса viewstate, но встречается только на одном из 2 серверов webfarm (правильный ключ машины)
msdeploy -verb:sync -source:webserver,computername=%MACHINE%,username=Administrator,password=%PASSWORD% -dest:webserver 2<&1
приложение является asp.net 4.0 веб-сайт, который работает на двух Server 2008 R2 веб-серверы за балансировка нагрузки, когда пользователи настроены на один сервер после их подключения. У нас есть <MachineKey>
набор жестко закодирован с ключами проверки и дешифрования в корневом сайте приложения и между обоими серверами одинаковый. Мое приложение настроено на пересылку событий исключения в нашу систему электронной почты.
Что происходит, так это то, что я получаю страшную «проверку MAC-адреса представлений» с серверов, но даже несмотря на то, что нагрузка на сервер составляет 50/50, ошибки вступают в разделение 99/1. Таким образом, один веб-сервер генерирует эти ошибки значительно чаще, чем другие. Это странно, учитывая, что серверы синхронизированы, и все конфигурации идентичны.
Я проделал обширный поиск по этой проблеме, и кажется довольно сложным найти какое-либо решение, которое не упоминает или не делает следующее.
<MachineKey>
не идентичен между серверами. (Я знаю, что это не моя проблема)- Настройка
enableViewStateMac=false
или некоторые другие настройки, которые ставят под угрозу безопасность сайта. - Убедитесь, что все теги действий по форме входов ссылки на той же странице, они размещены на
- Убедитесь, что идентификатор экземпляра серверов одинаковы (они)
- Если пользователь щелкает через страницы перед была загружена целая страница (viewstate) (мое viewstate настроено для рендеринга в верхней части страницы).
- Проблемы с Response.Redirect и Server.Transfer
Теперь я устранил все, кроме двух последних в качестве возможных причин. Мое приложение работает отлично уже более года без каких-либо проблем, и прямо перед появлением этих ошибок я включил состояние сеанса SQL, перенесил проект с .NET 3.5 на .NET 4.0 и установил для режима развертывания режима сервера в розницу. Я попытался переработать пулы приложений и выполнить «сброс iis» безрезультатно.
Есть ли у кого-нибудь еще какие-либо предложения относительно того, на что я могу смотреть? Итог i do NOT хочу исправить это, открыв отверстия безопасности на моем сайте.
Похоже, что это происходит с пользователями сразу после их аутентификации с использованием проверки подлинности в форме при первом входе в систему, но я не могу это подтвердить. У меня также есть теория, что это может иметь отношение к кешированию, но я тоже не могу быть уверен в этом.
Здесь сочные немного из моего web.config (я удалил некоторую конфиденциальную информацию)
<system.web>
<httpRuntime requestValidationMode="2.0"/>
<globalization culture="en-US" uiCulture="en-US" resourceProviderFactoryType="WebResourceFactory"/>
<compilation debug="true" defaultLanguage="c#" explicit="true" strict="true" targetFramework="4.0">
<assemblies>
</assemblies>
</compilation>
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="Login.aspx" protection="All" slidingExpiration="true"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<sessionState mode="SQLServer" sqlConnectionString="connection" compressionEnabled="true" />
<pages theme="Blue" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
<machineKey validationKey="key" decryptionKey="key" decryption="3DES" validation="SHA1" />
</system.web>
EDIT: Подчеркнут, что я использую состояние SQL сеанса с балансировкой нагрузки, установленной предпочитать пользователь маршрута к серверу, на котором они начали.
+1 для запроса помощи, а не для отключения защиты, которую я с грустью вижу как «исправление» слишком часто для этой проблемы, и подробный вопрос. – pwdst