Как работает Session_Start () в ферме серверов? - PullRequest
3 голосов
/ 25 февраля 2009

Событие OnSessionStart / Session_Start все еще срабатывает только один раз (всего) в среде фермы серверов, или поскольку запросы обрабатываются несколькими серверами, может ли оно срабатывать до одного раза на сервер?

ASP.NET / IIS6 или 7

Следует не предполагать, что сервер использует Sticky Sessions.

Ответы [ 4 ]

5 голосов
/ 25 февраля 2009

При установке IIS по умолчанию ответ «нет» - Session_Start обычно срабатывает несколько раз. Клиент будет создавать новый сеанс на каждом отдельном сервере, к которому он обращается. То же самое происходит, если вы используете опцию Web Garden в IIS.

Если вы не зависите от сеанса и у вас есть ферма серверов, обычно лучше полностью отключить состояние сеанса. Вот как вы это делаете: http://support.microsoft.com/kb/306996

Если вы зависите от сеанса, лучшим вариантом, вероятно, является служба сервера состояний ASP.NET. Все серверы в вашей ферме будут использовать один сервер для состояния сеанса, и это обеспечит запуск Session_Start только один раз. Для получения дополнительной информации и подробных сведений о настройке прочтите это (см. «Режим State Server», чтобы получить конкретные инструкции): http://aspdotnetdevs.blogspot.com/2008/12/aspnet-session-state-and-modes.html

4 голосов
/ 25 февраля 2009

В дополнение к Томасу: это зависит от ваших настроек состояния сеанса.

в web.config, <sessionState mode="" >

Если вы используете mode="InProc", вы получите несколько событий Session и SessionStart, по 1 на посещаемый сервер.

В других режимах (StateServer или SqlServer) вы получите 1 сеанс и 1 SessionStart. Вы не получите событие SessionEnd вообще.

1 голос
/ 25 февраля 2009

В ферме вы будете использовать Sql Server или State Server для управления состоянием сеанса на всех серверах в ферме. Этот единственный сервер, следящий за вашим состоянием, гарантирует, что OnSessionStart следует вызывать только один раз за сеанс, и нет необходимости постоянно возвращать все запросы на один и тот же сервер.

Основным недостатком использования одного сервера для поддержания состояния сеанса является то, что у вас больше нет события OnSessionEnd.

0 голосов
/ 25 февраля 2009

Насколько я понимаю, как только запрос достигает сервера в ферме, все последующие запросы одного и того же клиента должны перенаправляться на тот же сервер в ферме.

...