В многосерверной среде эта ошибка, вероятно, возникает, когда сеанс истекает и другой экземпляр приложения обрабатывается с тем же идентификатором сеанса и машинным ключом, но на другом сервере. Сначала каждый сервер создает свой собственный машинный ключ, который позже связывается с одним экземпляром приложения. Когда сеанс истекает и текущий сервер занят, приложение перенаправляется через балансировщик нагрузки на более рабочий сервер. В моем случае я запускаю одно и то же приложение с нескольких серверов, появляется сообщение об ошибке:
Проверка MAC состояния просмотра не удалась. Если это приложение размещено на веб-ферме или кластере, убедитесь, что в конфигурации указан один и тот же ключ проверки и алгоритм проверки.
Определение машинного кода в web.config решило проблему. Но вместо использования сторонних сайтов для генерации кода, который может быть поврежден, запустите это из своей командной оболочки: На основе решения Microsoft 1a, https://support.microsoft.com/en-us/kb/2915218#AppendixA
# Generates a <machineKey> element that can be copied + pasted into a Web.config file.
function Generate-MachineKey {
[CmdletBinding()]
param (
[ValidateSet("AES", "DES", "3DES")]
[string]$decryptionAlgorithm = 'AES',
[ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
[string]$validationAlgorithm = 'HMACSHA256'
)
process {
function BinaryToHex {
[CmdLetBinding()]
param($bytes)
process {
$builder = new-object System.Text.StringBuilder
foreach ($b in $bytes) {
$builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
}
$builder
}
}
switch ($decryptionAlgorithm) {
"AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
"DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
"3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
}
$decryptionObject.GenerateKey()
$decryptionKey = BinaryToHex($decryptionObject.Key)
$decryptionObject.Dispose()
switch ($validationAlgorithm) {
"MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
"SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
"HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
"HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
"HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
}
$validationKey = BinaryToHex($validationObject.Key)
$validationObject.Dispose()
[string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
"<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
$decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
$validationAlgorithm.ToUpperInvariant(), $validationKey)
}
}
Потом:
Для ASP.NET 4.0
Generate-MachineKey
Ваш ключ будет выглядеть так: <machineKey decryption="AES" decryptionKey="..." validation="HMACSHA256" validationKey="..." />
Для ASP.NET 2.0 и 3.5
Generate-MachineKey -validation sha1
Ваш ключ будет выглядеть так: <machineKey decryption="AES" decryptionKey="..." validation="SHA1" validationKey="..." />
person
Zly-Zly
schedule
05.06.2015