Потеря состояния сеанса с ASP.NET/SQL Server

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

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

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

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

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

Я подтвердил, что это идентично на обоих серверах, что-то мне не хватает?

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

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

Любые идеи?


person Matthew Abbott    schedule 11.05.2012    source источник
comment
Я сделал, тайм-аут сеанса установлен на 20 минут, и это, похоже, происходит при переходе от страницы к странице, на самом деле не тратя много времени на страницы вообще.   -  person Matthew Abbott    schedule 11.05.2012
comment
Я столкнулся с похожей, но другой проблемой. Хотел добавить это сюда на случай, если у кого-то еще возникнет проблема, и он тоже окажется здесь. В конце концов, мне пришлось изменить machineKey, чтобы указать методы дешифрования и проверки, а не полагаться на значения по умолчанию. Итак, когда я сгенерировал machineKey в IIS, я выбрал расшифровку 3DES и проверку HMASCHA256. Получившаяся конфигурация ‹machineKey decryption = 3DES decruyptionKey = ... validation = HMASCHA256 validationKey = ... compatibilityMode = Framework20SP1 сработала отлично.   -  person James Nelli    schedule 10.12.2016


Ответы (3)


Нашел проблему.

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

У двух серверов были разные идентификаторы для каждого приложения в IIS. Решение состоит в том, чтобы изменить идентификатор в разделе «Управление веб-сайтом -> Дополнительные настройки» на каждом сервере.

введите описание изображения здесь

person Matthew Abbott    schedule 14.05.2012
comment
У меня такая же проблема. Я тоже меняю appID, machineKey, но все равно теряю сессию. - person Alex Nguyen; 14.09.2015
comment
@AlexNguyen вы пробовали те же appID и machinekey? - person Kiquenet; 15.10.2016
comment
Зачем им нужен один и тот же идентификатор, настроенный в IIS? Почему это не очевидно в документации? Есть ли полная документация в MSDN? - person Kiquenet; 15.10.2016

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

введите описание изображения здесь

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

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

  3. В крайнем случае - перезапустите пулы приложений на обеих машинах и перезапустите IIS.

person Kris Krause    schedule 11.05.2012

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

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

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

person EdSF    schedule 11.05.2012