Gerenciamento de Sessão - Session State do ASP.NET

No Microsoft Track falamos um pouco sobre a necessidade de prepararmos a nossa aplicação web quando temos balanceamento de servidores web (Load Balance). Na terceira sessão o Rogerio Cordeiro mostra como fazer isto no IIS 7, em um exemplo onde ele e o Danilo Bordini configuraram um NLB (Network Load Balance) do Windows.

Após o evento do Rio recebi um email de um dos participantes sobre os recursos para fazermos gerenciamento de sessão em aplicações web que são balanceadas utilizando mecanismos de hardware e não de software. A solução apresentada no evento e que tratarei aqui, atende os dois tipos de balanceamento.

Primeiramente precisamos entender a necessidade de termos um gerenciador de sessão. Toda vez que temos um balanceamento de servidores não temos a garantia de qual servidor atenderá a requisição do nosso usuário. Portanto, precisamos ter um mecanismo que garanta que as informações da sessão estejam disponíveis para todos os servidores.

O ASP.NET oferece um mecanismo que permite que determinemos como desejamos gerenciar as sessões da nossa aplicação. Esta configuração pode ser feita no arquivo de Web.config. Entre as opções estão manter no próprio processo, em um processo separado ou em uma base SQL. Isto mesmo, você pode utilizar inclusive o SQL Server para gerenciar as suas sessões. E este processo é bem simples de ser efetuado. Os ASP.NET já oferece os scripts de criação da base de dados. Depois disto, basta configurar as informações no seu arquivo de web.config.

Você também pode configurar através do IIS. O IIS 7 oferece uma interface muito simples de ser utilizada para esta configuração. O IIS altera o Web.config da aplicação de acordo com a sua customização. O mesmo pode ser feito no IIS 6.

Mais informações podem ser obtidas no msdn.

P.S: Existe uma maneira de garantir que o usuário utilize sempre o mesmo servidor quando você estiver utilizando o recurso de NLB do Windows Server. Este recurso é conhecido como "Afinidade". Mas, as melhores práticas indicam que deve ser um recurso paliativo.