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.

sexta-feira, 3 de dezembro de 2010

LinqPad Conectado ao Azure Table Storage

  1. Siga os passos nesse outro post que usa o LinqPad para acessar o Development Storage.
  2. Altere o código da consulta para o seguinte:
StorageCredentialsAccountAndKey cak = new StorageCredentialsAccountAndKey(
"NOME_CONTA", // Nome da sua conta no ATS
"ACCESS_KEY" // Primary/secondary access key – pegue no portal do Azure (http://windows.azure.com)
);
CloudStorageAccount account = new CloudStorageAccount(cak, false);
// “ContextoDados" é sua classe de contexto, derivada de TableServiceContext
var contexto = new ContextoDados(account.TableEndpoint.AbsoluteUri, account.Credentials);

var resultado = contexto.Log; // Aqui entra sua consulta Linq
Console.Write(resultado);