Como é que Session_Start trabalho () in farm de servidores?
-
06-09-2019 - |
Pergunta
O evento OnSessionStart / Session_Start ainda só fogo uma vez (total) em um ambiente de farm de servidores, ou desde pedidos são tratados por vários servidores, poderia disparar até uma vez por servidor?
ASP.NET / IIS6 ou 7
Deve não se supor que o servidor está usando Fixo Sessions.
Solução
Com uma instalação padrão do IIS, a resposta é "não" - o Session_Start vai em fogo geral várias vezes. Um cliente irá criar uma nova sessão em cada servidor diferente que ela atinge. A mesma coisa acontece se você estiver usando a opção Web Garden no IIS.
Se você não dependem de sessão e você tem uma fazenda de servidor que são geralmente melhor fora de desativação estado de sessão completamente. Aqui está como fazê-lo: http://support.microsoft.com/kb/306996
Se você depender de Sessão sua melhor opção é provavelmente o serviço do servidor Estado ASP.NET. Todos os servidores do farm vai usar um único servidor para o estado da sessão, e que irá garantir que Session_Start só é acionado uma vez. Para os lotes de fundo e detalhes sobre a configuração ler este (olhar para o "Modo de Estado do servidor" para obter instruções específicas): http://aspdotnetdevs.blogspot.com/2008/12 /aspnet-session-state-and-modes.html
Outras dicas
Além de Thomas:. Tudo depende das suas configurações de Estado de Sessão
em web.config, <sessionState mode="" >
Se você usar mode="InProc"
você vai ter vários eventos de sessão e SessionStart, 1 por servidor visitado.
Nos outros modos (StateServer ou SqlServer) você terá 1 sessão e 1 SessionStart. Você vai não obter um evento SessionEnd em tudo.
Em uma fazenda, você estaria usando SQL Server ou um servidor de estado para o gerenciamento de estado de sessão em todos os servidores no farm. É ter esse único servidor cuidar de seu estado que garante que OnSessionStart só deve ser chamado uma vez por sessão e não há necessidade de ter que ter sempre todos os pedidos voltar para o mesmo servidor.
A principal desvantagem de usar um único servidor para manter o estado da sessão é que você não tem mais um evento OnSessionEnd.
meu entendimento é que uma vez que um pedido chegar a um servidor no farm, todos os futuros pedidos do mesmo cliente deve ser redirecionado para o mesmo servidor no farm.