Подтвердить что ты не робот

Потеря состояния сеанса с помощью ASP.NET/SQL Server

У меня есть рабочий процесс ASP.NET MVC, настроенный как два веб-сайта, управляемых балансировщиком нагрузки. Сайты используют Sql Server в качестве поставщика состояния сеанса и отключают аутентификацию (его не требуется).

Теперь, спорадически, я, кажется, теряю состояние сеанса, и я считаю, что это связано с тем, что запрос обрабатывается альтернативным сервером, поэтому по существу пользователь прыгает с сервера на сервер, в зависимости от того, как выглядит балансировщик нагрузки. Я не всегда "теряю состояние сеанса" на том же этапе рабочего процесса, поэтому считаю, что это связано с конфигурацией веб-фермы и состояния сеанса SQL Server.

Оба приложения используют один и тот же машинный ключ для шифрования и дешифрования состояния сеанса, хранящегося на сервере sql.

Конфигурация на обоих серверах выглядит следующим образом:

<authentication mode="None" />
<sessionState mode="SQLServer" sqlConnectionString="{connection-string}" />
<machineKey decryptionKey="777CB456774AF02F7F1AC8570FAF31545B156354D9E2DAAD" 
            validationKey="89B5B536D5D17B8FE6A53CBB3CA8B8695289BA3DF0B1370BC47D362D375CF91525DDB5307D8A288230DCD4B3931D23AED4E223955C45CFF2AF66BCC422EC7ECD" />

Я подтвердил, что это идентично на обоих серверах, есть ли что-то, чего я не вижу?

Это не происходит в моей среде разработки, когда я использую один сервер.

Я боюсь, что я страдаю от пятничного блюза, и, несомненно, найду ответ на следующей неделе, к сожалению, я не хочу ждать!

Любые идеи?

4b9b3361

Ответ 1

Обнаружена проблема.

При создании приложений, которые вы собираетесь использовать в сеансе с использованием Sql Server, им нужен одинаковый идентификатор, настроенный в IIS. Это связано с тем, что сгенерированный идентификатор сеанса создается на основе идентификатора приложения. (Внутренне идентификатор приложения - это что-то вроде LM/W3SVC/1

Два сервера имели разные идентификаторы для каждого приложения в IIS. Разрешение заключается в изменении идентификатора в разделе "Управление сайтом → Дополнительные настройки" на каждом сервере.

enter image description here

Ответ 2

  • Используя диспетчер IIS, дважды проверьте параметры вашего машинного ключа как на уровне корневого сайта, так и на веб-сайте.

enter image description here

  1. Просмотрите модификатор IsolateApps на ключевом элементе машины - http://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.100%29.aspx

  2. Вы недавно обновлялись с 3.5 до 4.0?

  3. Последнее средство - перезагрузите appPools на обеих машинах и перезапустите IIS.

Ответ 3

Сессии имеют (веб) область приложения. Посмотрите, помогает ли этот MS KB.

Обновление: Интересный голос. Возможно, мое предложение нуждается в большей ясности.

В добавлении для сопоставления машинных клавиш вам также необходимо сопоставить конфигурацию IIS для сайтов (так что это "то же приложение" (путь приложения) в IIS.