Вопрос по asp.net-mvc, sql-session-state, asp.net, machinekey – Потеря состояния сеанса с ASP.NET/SQL Server

19

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

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

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

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

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

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

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

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

Любые идеи

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

Ваш Ответ

3   ответа
28

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

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

У меня та же проблема. Я также меняю appID, machineKey, но все еще теряю сессию. Alex Nguyen
@ AlexNguyen ты пробовал один и тот же appID и machinekey? Kiquenet
Почему им нужен одинаковый идентификатор, настроенный в IIS? Почему этого не видно в документации? Любой полная документация в MSDN ? Kiquenet
8
Используя IIS Manager, дважды проверьте настройки ключа компьютера на уровне root и на сайте.

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

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

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

6

это MS KB помогает.

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

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

Похожие вопросы