Duas das minhas últimas postagens sobre Azure se dedicaram a explorar um dos mais comuns problemas que ocorrem no início da utilização do mesmo:

    1. CloudStorageAccount e o método SetConfigurationSettingPublisher
    2. Porque SetConfigurationSettingPublisher precisa ser chamado antes de FromConfigurationSetting?

Estes erros são muito comuns pois na maioria dos casos não é realizado um planejamento eficaz pensando nos ambientes para teste e desenvolvimento.

Imagine que você está desenvolvendo uma aplicação e naturalmente resolve armazenar a configuração da conta em um arquivo .config para recuperar esta informação em tempo de execução. Utilizando a solução conforme já estudamos anteriormente, conseguimos isto sem problemas após iniciar o delegate chamado por SetConfigurationSettingPublisher como na imagem abaixo:

01

Estou utilizando o exemplo do artigo 1 citado anterior (baixe o Código fonte do Artigo).

 

Tudo corre perfeitamente pois você está rodando sua aplicação dentro do ambiente de desenvolvimento do Azure. Agora vamos levar em conta que durante os testes ou desenvolvimento da aplicação você executou seu projeto e por ventura ele está sendo executado como um projeto Web local e fora do ambiente Azure. O que vai acontecer???

02

O erro aconteceu quando a aplicação estava tentando ler a “configuração” da conta (que utiliza bibliotecas da classe ‘RoleEnvironment’) com o método RoleEnvironment.GetConfigurationSettingValue. Nosso código já está estruturado e conforme vimos nos artigos anteriores e na figura 1, ele está funcionando perfeitamente, entretanto quando executamos a busca de nossas credenciais temos umSEHExceptionde presente.

Quando estamos executando nossa aplicação dentro do ambiente de desenvolvimento do Azure, ela irá executar utilizando a porta 81 como padrão, exatamente como na imagem abaixo. Caso a aplicação esteja fora do ambiente, teríamos um número aleatório como é comum as execuções ASP.NET.

 03

Um primeiro conceito que podemos abstrair aqui é verificar se estamos no ambiente de desenvolvimento do Azure. Isto pode ser feito utilizando o método IsAvailable da classe  RoleEnvironment. Quando utilizamos RoleEnvironment.IsAvailable(), recebemos um true or falseindicando se o mesmo encontra-se no ambiente Azure. Quando executamos nossa aplicação fora do contexto, recebemos um false indicando isto.

04 

Agora que já sabemos como identificar em qual ambiente estamos executando e de acordo com o que já estudamos anteriormente, podemos definir uma estratégia para garantir que nossa aplicação possa executar em ambientes distintos.

Vamos alterar o método “MeuEditorDeConfiguracao” conforme o código abaixo:

05

Notem que se o ambiente estiver disponível nós utilizamos o método GetConfigurationSettingValuepara obter o valor da configuração no arquivo .cscfg, caso contrário, utilizamos o famosoWebConfigurationManager para obter a configuração que neste caso está no arquivo Web.config.

06

Este é um exemplo básico mas abre caminho para inúmeras possibilidades. Como desenvolvedores nos deparamos com incontáveis situações e cenários que vão exigir adaptação e flexibilidade em nossas soluções.

Código fonte do artigo aqui.

 Um grande abraço e ótimo estudo!

logo

     Twitter: @vitormeriat
     vitormeriat@gmail.com
     vitor.pereira@studentpartners.com.br