RSS feed
Inicialização Automática para Aplicações ASP.NET (Série de posts sobre VS 2010 e .NET 4.0) - ScottGu's Blog em Português

Inicialização Automática para Aplicações ASP.NET (Série de posts sobre VS 2010 e .NET 4.0)

Este é o sétimo de uma série de posts que estou escrevendo sobre o próximo lançamento do VS 2010 e .NET 4.

Eu vou mudar o foco dos posts e ao invés de escrever sobre novos recursos de ferramentas do VS 2010, escreverei alguns posts que cobrem novos recursos do motor de execução (não se preocupe – eu voltarei a escrever sobre muitos outros recursos do VS. Eu estou simplesmente tentando misturar um pouco as coisas).

O post de hoje cobre um recurso pequeno, mas legal, que você agora pode opcionalmente tirar proveito usando a ASP.NET 4 - a capacidade de inicializar automaticamente e proativamente ativar uma aplicação web sem ter que aguardar o acesso de um cliente externo ao servidor. Isto pode te ajudar a prover uma experiência de resposta rápida para o primeiro usuário que acessar o servidor, e evita que você escreva scripts customizados para "aquecer" o servidor e ter todo o cache de dados pronto. Isto funciona com todos os tipos de aplicação ASP.NET – incluindo ambas as aplicações baseadas em Formulários Web ASP.NET e ASP.NET MVC.

Auto-Inicialize Aplicações Web com a ASP.NET 4

Algumas aplicações web precisam carregar grandes quantidades de dados ou executar um processamento de inicialização custoso antes de estarem prontas para processar requisições. Desenvolvedores que usam ASP.NET hoje geralmente fazem este trabalho usando o tratador de evento "Application_Start" que fica dentro do arquivo Global.asax da aplicação (o qual é ativado na primeira vez que uma requisição é executada). Eles geralmente seguem dois caminhos: criam scripts customizados para enviar requisições falsas para aplicação periodicamente "acorde a aplicação" e executam este código antes que um cliente acesse o servidor, ou simplesmente fazem com que o usuário desafortunado que acessa a aplicação pela primeira vez aguarde enquanto a lógica termina antes de processar a requisição (o que pode gerar um longo delay (atraso) para o cliente/usuário).

A ASP.NET 4 vem com um novo recurso chamado "auto-start" ou auto-inicialização que melhor endereça este cenário e está disponível quando a ASP.NET 4 roda no IIS 7.5 (o qual acompanha o Windows 7 e o Windows Server 2008 R2). O recurso de auto-inicialização provê uma abordagem controlada para iniciar o worker process (processo que executa todas as funcionalidades da ASP.NET) de uma aplicação, iniciando uma aplicação ASP.NET e então aceitando requisições HTTP.

Configurando uma Aplicação ASP.NET 4 para Auto-Inicializar

Para usar o recurso de auto-inicialização da ASP.NET 4, você primeiramente configura o worker process do "application pool" do ISS no qual sua aplicação está incluída para que o worker process seja automaticamente inicializado na primeira vez em que o servidor web for carregado. Você pode fazer isto abrindo o arquivo applicationHost.config do IIS 7.5 (C:\Windows\System32\inetsrv\config\applicationHost.config) e adicionando um atributo startMode=”AlwaysRunning” na entrada da propriedade <applicationPools>:

<applicationPools>

     <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />

</applicationPools>

Abra o gerenciador de tarefas do Windows e clique na checkbox "mostrar processos de todos os usuários". Salve as mudanças efetuadas no arquivo applicationHots.config. Você verá que um novo worker process chamado "w3wp.exe" imediatamente será inicializado no exato momento em que o arquivo é salvo.

Um único worker process de um pool de aplicações do IIS pode conter múltiplas aplicações ASP.NET. Você pode especificar quais aplicações você quer automaticamente inicializar quando o worker process for executado adicionando um atributo serviceAutoStartEnabled="true" na entrada da configuração da aplicação <application>:

<sites>

     <site name="MySite" id="1">

          <application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />

     </site>

</sites>

<serviceAutoStartProviders>

     <add name="PreWarmMyCache" type="PreWarmCache, MyAssembly" />

</serviceAutoStartProviders>

O atributo serviceAutoProvider="PreWarmMyCache" acima faz referência a uma entrada de provedor dentro do arquivo de configuração que permite a você configurar uma classe customizada que pode ser usada para encapsular qualquer lógica de "aquecimento" para a aplicação. Esta classe pode ser automaticamente invocada tão logo o worker process e a aplicação sejam pré-carregados (antes que uma requisição web externa seja recebida), e pode ser usada para executar qualquer inicialização ou lógica para o carregamento do cache que você queira antes que requisições sejam recebidas e processadas:

public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient
{

    public void Preload(string[] parameters)
   
{

        // Execute lógica de inicialização e carregamento de cache aqui...

    }

}

O IIS inicializará a aplicação em um estado durante o qual a aplicação não aceitará requisições até que sua lógica de "aquecimento" seja executada. Após o seu código de inicialização ter sido executado no método Preload e o método retornar, a aplicação ASP.NET será marcada como pronta para receber requisições.

Você pode opcionalmente combinar o novo recurso de auto-inicialização com as capacidades de balanceamento de carga da extensão Roteamento de Requisições da Aplicação do IIS7 e usá-la para sinalizar a um balanceador de carga quando a aplicação estiver inicializada e pronta para receber tráfego HTTP no exato ponto em que o servidor pode ser trazido para o web farm (fazenda de servidores web) para processar requisições.

Sumário

O novo recurso de auto-inicialização da ASP.NET 4 e do IIS 7.5 provê uma abordagem bem definida que permite a você rodar uma inicialização custosa para a aplicação e lógica de pré-cache que podem ser executadas antes que qualquer usuário final acesse sua aplicação. Isto permite a você ter sua aplicação "aquecida" e pronta desde o começo para entregar uma experiência consistente de alta performance.

Espero que ajude,

Scott

P.S. Além de escrever posts neste blog, eu tenho usado o Twitter mais recentemente para disponibilizar posts rápidos e compartilhar links. Você pode me seguir no Twitter em http://www.twitter.com/scottgu (@scottgu é o meu nome no Twitter).


Texto traduzido do post original por Leniel Macaferi.

Published Tuesday, September 15, 2009 3:46 AM by Leniel Macaferi

Comments

No Comments