2013-08-13 8 views
3

Моя команда использует режим сеанса «in-proc» для настройки нескольких серверов. Это явно не кажется мне очевидным, потому что состояние сеанса будет уникальным на каждом сервере и не будет использоваться совместно.«Состояние сеанса в режиме proc» в настройке нескольких серверов?

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

Любой свет на это ценится.

Спасибо!

ответ

7

При использовании состояния сеанса InProc сеанс будет храниться локально на сервере, который обслуживал запрос, и поэтому использование одного и того же машинного ключа на обоих серверах не будет служить цели.

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

Рассмотрим очень распространенный сценарий:

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

Существует нечто, называемое StickySessions, который может решать выше сценария. Но это действительно хорошо?

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

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

Читайте здесь для полного понимания: http://dotnetcodr.com/2013/07/01/web-farms-in-net-and-iis-part-5-session-state-management/

+1

Хорошее объяснение, спасибо. Это имеет значение, если это сценарий проверки подлинности форм или сценариев Windows? А также, остается ли проблема, если мы ничего не храним в переменных сеанса? – Gadam

+0

Аутентификация Windows предназначена для сценария интрасети. Это не использует файлы cookie. Аутентификация форм может содержать или не использовать файлы cookie в зависимости от ваших настроек. И в зависимости от ваших требований вы можете или не хотите использовать переменные сеанса. –

+1

Это отвечает на вопрос о том, «будет ли работать InProc ** для меня?» (Нет). Но ответ на реальный вопрос: «Что я использую вместо этого?"является ** StateServer ** или ** SQLServer **, см. https://msdn.microsoft.com/en-us/library/ms178586(v=vs.140).aspx – MGOwen