Состояние сеанса потеряно в веб-ферме asp.net
Я был занят этим уже несколько месяцев.
В настоящее время у меня есть 2 сервера для 1 сайта. Используя round robin dns, я обнаружил, что в начале все работает (проверяя ip сайта, он изменился, но я могу продолжить сеанс), но через некоторое время я теряю сеанс, кажется, что cookie для проверки подлинности с помощью форм не может быть прочитан и отбрасывается. (предположение) Но это не происходит все время. Только иногда.
Я использую общую конфигурацию iis7, я установил ключ компьютера и использую сервер состояний, указывающий на один из серверов, и проверил, что на обоих серверах работает сервер состояний.
Я прочитал кое-что о пути приложения IIS, но я действительно не знаю, что подразумевается под этим, это путь к веб-приложению или путь, где установлен IIS? В обоих случаях они одинаковы.
У кого-нибудь есть идеи?
2 ответа
Я отвечу на это сам, для тех, кто сталкивается с той же проблемой. Все настроено правильно, но ключ машины должен находиться в web.config в system.web. Генерация ключа через iis 7 по какой-то причине не сработала, я сгенерировал его с помощью онлайн-инструмента: http://aspnetresources.com/tools/machineKey
Итак, для балансировки нагрузки и настройки нескольких серверов на iis7 вам необходимо:
- Используйте out-proc сервера состояний (сервер состояний или сервер sql), и все серверы должны указывать на этот сервер состояний (пример: stateConnectionString="tcpip=server1:42424")
- Используйте общую конфигурацию iis, чтобы все ваши серверы указывали на общую папку, в которой находится applicationhost.config.
- Сгенерируйте машинный ключ (не через iis, просто используйте онлайн-инструмент!)
- Настройте NLB (или DNS циклического перебора) и протестируйте его, сбросив свой DNS на своем клиенте, когда вы вошли в систему, и посмотрите, не потеряется ли ваш сеанс.
Надеюсь, это кому-нибудь поможет.
И ключи машины специфичны для версии.NET. Чтобы проверить текущую версию: В консоли IIS на уровне сервера нажмите "Изменить версию.NET Framework" на панели "Действия".