segunda-feira, 6 de dezembro de 2010

Session Management no Azure

Cuidado você que usa o objeto Session no seu código ASP.NET. O Azure não implementa “sticky sessions” ou “server affinity” para seus web roles: a cada acesso seu usuário pode ser atendido por uma instância diferente. Então o mesmo usuário pode ser atendido por instâncias diferentes do seu web role no Azure, e se você usa o modo default de gerenciamento de sessão (“InProc”), então seu código irá dar pau:

image

A Microsoft publicou o projeto AspProviders Sample (parte do Windows Azure Samples) que contém um provider para armazenamento de sessões ASP.NET no Storage do Azure. Há também a possibilidade de armazenamento em um BD no SQL Azure.

O importante é lembrar que, se você deseja ter mais de uma instância de um web role no Azure, o que é altamente desejável por aumentar a disponibilidade e a escalabilidade da aplicação, você tem que usar um provider para armazenamento das sessões, e você tem que programar “consciente” disto: por exemplo, todas as classes que forem ser colocadas em sessão necessariamente terão que ser serializáveis. É uma programação um pouco mais trabalhosa, mas o custo x benefício vale a pena.