У меня есть два веб-сервера за балансировщиком нагрузки F5. Каждый веб-сервер имеет идентичные приложения для другого. Не было проблем, пока конфигурация балансировщика нагрузки не изменилась с сохранения адреса источника на минимальное количество подключений.
Теперь в некоторых приложениях я получаю эту ошибку
Ошибка сервера в приложении '/'
Ошибка проверки MAC состояния просмотра. Если это приложение размещено на веб-ферме или кластере, убедитесь, что в конфигурации указан один и тот же ключ проверки и алгоритм проверки. AutoGenerate нельзя использовать в кластере. Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительных сведений об ошибке и ее происхождении в коде.
Сведения об исключении: System.Web.HttpException: ошибка проверки MAC состояния просмотра. Если это приложение размещено на веб-ферме или кластере, убедитесь, что в конфигурации указан один и тот же ключ проверки и алгоритм проверки. AutoGenerate нельзя использовать в кластере.
Ошибка источника:
Исходный код, создавший это необработанное исключение, может быть показан только при компиляции в режиме отладки. Чтобы включить это, выполните одно из следующих действий, а затем запросите URL-адрес:
Добавьте директиву Debug = true в начало файла, вызвавшего ошибку. Пример:
или:
2) Добавьте следующий раздел в файл конфигурации вашего приложения:
Обратите внимание, что этот второй метод приведет к компиляции всех файлов в данном приложении в режиме отладки. Первый метод приведет к компиляции только этого конкретного файла в режиме отладки.
Важно: Запуск приложений в режиме отладки вызывает накладные расходы на память / производительность. Перед развертыванием в производственном сценарии необходимо убедиться, что в приложении отключена отладка.
Как добавить машинный ключ в файл machine.config? Я делаю это на уровне сервера в IIS или на уровне веб-сайта / приложения для каждого сайта? Должны ли ключи проверки и дешифрования быть одинаковыми на обоих веб-серверах или они разные? Должны ли они быть разными для каждой версии machine.config .net?
Я не могу найти никакой документации по этому сценарию.
Если он вам нужен только для вашего веб-сайта, вы можете добавить его в файл web.config на своем веб-сайте. Если существует несколько сайтов / приложений, которым необходимо использовать один и тот же ключ machineKey для шифрования / дешифрования, тогда вы должны использовать файл конфигурации с машинной областью.
И да, они должны быть одинаковыми на всех серверах в ферме, и вы должны сделать это для каждой папки .NET machine.config (.NET 2.0 + 4.0 и x86 + x64, поэтому вы можете обновлять четыре файла).
Вот пример кода, который вы можете использовать для генерации ключей:
/// <summary>
/// http://msdn.microsoft.com/en-us/library/w8h3skw9.aspx
/// </summary>
public static string CreateMachineKey(int characterLength)
{
/*
* decryptionKey:
* DES: 64 bits (16 hexadecimal characters)
* 3DES:192 bits (48 hexadecimal characters)
* AES: 128 bits (32 characters), 192 bits (48 characters), or 256 bits (64 characters)
*
validationKey:
AES requires a 256-bit key (64 hexadecimal characters).
MD5 requires a 128-bit key (32 hexadecimal characters).
SHA1 requires a 160-bit key (40 hexadecimal characters).
3DES requires a 192-bit key (48 hexadecimal characters).
HMACSHA256 requires a 256-bit key (64 hexadecimal characters).
HMACSHA384 requires a 384-bit key (96 hexadecimal characters).
HMACSHA512 requires a 512-bit key (128 hexadecimal characters).
*/
byte[] byteArray = new byte[characterLength / 2];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(byteArray);
StringBuilder sb = new StringBuilder(characterLength);
for (int i = 0; i < byteArray.Length; i++)
{
sb.Append(string.Format("{0:X2}", byteArray[i]));
}
Debug.WriteLine(sb);
return sb.ToString();
}
Вот пример файла machine.config:
<system.web>
<machineKey
decryption="AES"
decryptionKey="D416EFCFEC011CC3A8F0F72A15E7EF725AA39FDBCE3CA361"
validation="HMACSHA256"
validationKey="EF4BFB4B2E1A9AB427430897A13528E4530A231112014E070B246DCA7383EB7F4163D685F590E9B54005F5215AD3BA7CE4EA7D404FE310C543D100D09CC00AE2"/>
</system.web>
Файлы:
% SYSTEMROOT% \ Microsoft.NET \ Framework \ v4.0.30319 \ CONFIG \ machine.config
% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ CONFIG \ machine.config
% SYSTEMROOT% \ Microsoft.NET \ Framework \ v2.0.5727 \ CONFIG \ machine.config
% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v2.0.5727 \ CONFIG \ machine.config