Ciclo de Vida do Aplicativo ASP.NET uma visão geral para o IIS 5.0 e 6.0

Esse tópico esboça o ciclo de vida de aplicativos ASP.NET, listando eventos importantes do ciclo de vida e descrevendo como o código que você escreve pode ser inserido no ciclo de vida do aplicativo.A informação contida nesse tópico aplica-se ao IIS 5.0 e 6.0.Para informações sobre o ciclo de vida de aplicativos ASP.NET para IIS 7.0, veja Uma visão geral do Ciclo de Vida do Aplicativo ASP.NET para o IIS 7.0.

Dentro do ASP.NET, vários processos devem ocorrer para um aplicativo ASP.NET ser inicializado e solicitações de processos.Adicionalmente, ASP.NET é apenas uma peça da arquitetura do servidor Web que serve as solicitações feitas pelos navegadores.É importante entender o ciclo de vida da página para que você possa escrever o código no estágio do ciclo de vida apropriado para o efeito que pretende.

Ciclo de Vida do Aplicativo em Geral

A tabela seguinte descreve os estágios do ciclos de vida do aplicativo ASP.NET.

Estágio

Descrição

Usuários solicitam um recurso do aplicativo do servidor Web.

O ciclo de vida de um aplicativo ASP.NET inicia-se com uma solicitação enviada pelo navegador para o servidor Web (para aplicativos ASP.NET, tipicamente IIS).ASP.NET é uma extensão ISAPI sob o servidor Web.Quando um servidor Web recebe uma solicitação, ele examina a extensão do nome do arquivo requerido, determina qual extensão ISAPI deve manipular a solicitação, e então passa a solicitação para a extensão ISAPI apropriada.ASP.NET manipula extensões de nomes de arquivos que foram mapeadas para isso, como .aspx, .ascx, .ashx, e .asmx.

Observação:
Se uma extensão de um nome de arquivo não foi mapeada para ASP.NET, ASP.NET não receberá a solicitação.Isso é importante de se entender para aplicativos que usam autenticação ASP.NET.Por exemplo, pelo fato de arquivos .htm tipicamente não serem mapeados para ASP.NET, ASP.NET não irá executar verificação de autenticação e autorização para arquivos .htm.Portanto, mesmo que o arquivo contenha apenas conteúdo estático, se você deseja que o ASP.NET verifique a autenticação, crie o arquivo usando uma extensão de nome de arquivo mapeada para o ASP.NET, como o .aspx.
Observação:
Se você criar um manipulador personalizado para servir a uma extensão de nome de arquivo particular, você deve mapear a extensão para ASP.NET no IIS e também registrar o manipulador em seu arquivo Web.config do aplicativo.Para obter mais informações, consulte Visão Geral sobre Módulos HTTP e Manipuladores HTTP.

O ASP.NET recebe a primeira solicitação para o aplicativo.

Quando ASP.NET recebe a primeira solicitação para algum recurso em um aplicativo, uma classe chamada ApplicationManager cria um domínio do aplicativo.O domínio de aplicativos proporciona isolamento entre aplicações para variáveis globais e permite cada aplicação ser descarregada separadamente.Dentro de um domínio de aplicativo, uma instância de uma classe nomeada HostingEnvironment é criada, essa proporciona acesso à informação sobre o aplicativo, como o nome da pasta onde ele está armazenado.

O seguinte diagrama ilustra a relação:

ASP.NET também compila os itens de alto alto nível no aplicativo se necessário, incluindo código do aplicativo na pasta App Code.Para maiores informações, veja "Ciclo de Vida da Compilação" mais à frente nesse tópico.

Objetos principais do ASP.NET são criados para cada solicitação.

Após a criação do domínio do aplicativo e da inicialização do objeto HostingEnvironment, ASP.NET cria e inicializa os objetos principais como HttpContext, HttpRequest, e HttpResponse.A classe HttpContext contém objetos que são específico da solicitação do aplicativo atual, como os objetos HttpRequest e HttpResponse.O objeto HttpRequest contém informações sobre a solicitação atual, incluindo cookies e informações do navegador.O Objeto HttpResponse contém as respostas que são enviadas para o cliente, incluindo todas as saídas submetidas e cookies.

Um objeto HttpApplication é designado à solicitação.

Depois que todos os objetos principais do aplicativo foram iniciados, o aplicativo é iniciado criando uma instância da classe HttpApplication.Se o aplicativo possui um arquivo Global.asax, o ASP.NET cria uma instância da classe Global.asax que é derivada da classe HttpApplication e usa a classe derivada para representar o aplicativo.

Observação:
A primeira vez que uma página ASP.NET ou processo é solicitado em um aplicativo, uma nova instância de HttpApplication é criada.No entanto, para maximizar o desempenho, instância de HttpApplication podem ser usado para múltiplas solicitações.

Quando uma instância de HttpApplication é criada, qualquer módulo configurado também é criado.Por exemplo, se o aplicativo é configurado para fazê-lo, ASP.NET cria um módulo SessionStateModule.Após todos os módulos configurados serem criado, o método Init da classe HttpApplication é chamado.

O seguinte diagrama ilustra a relação:

A solicitação é processada pelo pipeline HttpApplication.

O seguintes eventos são executados pela classe HttpApplication enquanto a solicitação é processada.Os eventos são de particular interesse dos desenvolvedores que desejam estender a classe HttpApplication.

  1. Validar a solicitação, examina a informação enviada ao navegador e determina quando ela contém marcações potencialmente mal-intencionadas.Para obter mais informações, consulte ValidateRequest e Visão Geral de Scripts Maliciosos.

  2. Execute mapeamento de URL, se alguma URL foi configurada na seção UrlMappingsSection do arquivo Seb.config.

  3. Crie o evento BeginRequest.

  4. Crie o evento AuthenticateRequest.

  5. Crie o evento PostAuthenticateRequest.

  6. Crie o evento AuthorizeRequest.

  7. Crie o evento PostAuthorizeRequest.

  8. Crie o evento ResolveRequestCache.

  9. Crie o evento PostResolveRequestCache.

  10. Baseado na extensão do nome do arquivo da solicitação de recurso (mapeado no arquivo de configuração do aplicativo), selecione a classe que implementa IHttpHandler para processar a solicitação.Se a solicitação é de uma objeto (página) derivado da classe Page e a página necessita ser compilada, ASP.NET compila a página antes de criar uma instância dela.

  11. Crie o evento PostMapRequestHandler.

  12. Crie o evento AcquireRequestState.

  13. Crie o evento PostAcquireRequestState.

  14. Crie o evento PreRequestHandlerExecute.

  15. Chame o método ProcessRequest (ou a versão assíncrona IHttpAsyncHandler.BeginProcessRequest) da classe IHttpHandler apropriada para a solicitação.Por exemplo, se está sendo solicitada uma página, a instância da página atual manipula a solicitação.

  16. Crie o evento PostRequestHandlerExecute.

  17. Crie o evento ReleaseRequestState.

  18. Crie o evento PostReleaseRequestState.

  19. Executa filtro de resposta se a propriedade Filter está definida.

  20. Crie o evento UpdateRequestCache.

  21. Crie o evento PostUpdateRequestCache.

  22. Crie o evento EndRequest.

  23. Crie o evento PreSendRequestHeaders.

  24. Crie o evento PreSendRequestContent.

Ciclo de Vida de Eventos e do arquivo Global.asax

Durante o ciclo de vida do aplicativo, a aplicação cria eventos que você pode manipular e chama métodos particulares que você pode substituir.Para manipular eventos ou métodos de aplicações, você pode criar um arquivo chamado Global.asax no diretório raiz do seu aplicativo.

Se você criar um arquivo Global.asax, ASP.NET o compila em uma classe derivado da classe HttpApplication, e então usa a classe derivada para representar o aplicativo.

Uma instância de HttpApplication processa apenas uma solicitação de cada vez.Isso simplifica a manipulação de eventos do aplicativo porque você não necessita bloquear membros não estáticos na classe do aplicativo quando você o acessa.Isso te permite armazenar dados específicos da solicitação em membros não estáticos da classe do aplicativo.Por exemplo, você pode definir uma propriedade no arquivo Global.asax e designar à ele um valor específico de solicitação.

ASP.NET liga automaticamente eventos de aplicações à manipuladores no arquivo Global.asax usando a convenção de nome Application_event, como Application_BeginRequest.Isso é similar à forma que os métodos da página ASP.NET são automaticamente ligados à eventos, como o evento da página Page_Load.Para obter detalhes, consulte:Visão Geral do Ciclo de Vida da Página ASP.NET.

Os métodos Application_Start e Application_End são métodos especiais que não representam eventos HttpApplication.ASP.NET os chama uma vez no tempo de vida do domínio do aplicativo, não a cada instância de HttpApplication.

A tabela seguinte lista alguns dos eventos e métodos que são usados durante o ciclo devida da aplicação.Existem muito mais eventos que aqueles listados, mas eles não são comumente utilizados.

Eventos ou métodos

Descrição

Application_Start

Chamados quando o primeiro recurso (como a página) da aplicação ASP.NET é solicitado.O método Application_Start é chamado apenas uma vez durante o ciclo de vida de uma aplicação.Você pode usar esse método para executar tarefas de inicialização como carregamento de dados para o cache e inicialização de valores estáticos.

Você deve apenas definir dados estáticos durante o início da aplicação.Não defina nenhuma instância de dados porque ela está disponível apenas à primeira instância da classe HttpApplication que é criada.

Application_event

Criado no momento apropriado do ciclo de vida da aplicação, como lista do na tabela do ciclo de vida da aplicação, previamente nesse tópico.

Application_Error pode ser criada em qualquer fase do ciclo do vida da aplicação.

Application_EndRequest é o único evento que é garantido que será criado em toda solicitação, porque uma solicitação pode ser curto-circuitada.Por exemplo, se dois módulos manipulam o evento Application_BeginRequest e o primeiro encontra uma exceção, o eventoApplication_BeginRequest não será chamado para o segundo módulo.No entanto, o método Application_EndRequest é sempre chamado para permitir o aplicativo limpar os recursos.

Init

Chamado uma vez para cada instância da classe HttpApplication depois que todos os módulos tiverem sido criados.

Dispose

Chamado antes que a instância da aplicação seja destruída.Você pode usar esse método para liberar manualmente qualquer recurso não gerenciado.Para obter mais informações, consulte Limpando recursos não gerenciados.

Application_End

Chamado uma vez pelo tempo de vida do aplicativo antes desse ser descarregado.

Ciclo e Vida de Compilação

Quando a primeira solicitação é feita ao aplicativo, ASP.NET compila os itens do aplicativo em uma orem específica.O primeiro item a ser compilado são os itens referentes ao níveis altos.Após a primeira solicitação, o itens de alto nível são recompilado apenas se uma dependência muda.A seguinte tabela descreve a orem na qual os itens de alto nível do ASP.NET são compilados.

Item

Descrição

App_GlobalResources

Os recursos globais do aplicativo são compilados e um ponto de montagem de recursos é criado.Qualquer montagem na pasta Bin do aplicativo é ligada ao recurso de montagem.

App_WebResources

Tipos de proxy para serviços Web são criados e compilados.A montagem resultante de referências Web é ligada ao recurso de montagem se ele existir.

Propriedades de perfil são definidas no arquivo Web.config

Se propriedades de perfil são definidas no arquivo Web.config do aplicativo, uma montagem que contém um objeto de perfil é gerada .

App_Code

Arquivos de código fonte são construídos e uma ou mais mmontagenssão criadas.Todas as montagens de código e perfil de montagem são ligados aos recursos e montagens de referências Web se existir.

O arquivo Global.asax

O objeto da aplicação é compilado e ligado à todas as montagens geradas previamente.

Após a compilação de todos os objetos de alto nível, ASP.NET compilado pastas, páginas, e outros itens quando necessários.A seguinte tabela descreve a orem na qual as pastas ASP.NET e itens são compilados.

Item

Descrição

App_LocalResources

Se a pasta contendo o item solicitado contém uma pasta App_LocalResources, o conteúdo da pasta recursos locais são compilados e ligados à montagem dos recursos globais.

Páginas Web individuais (arquivos .aspx), controle de usuários (arquivos .ascx), manipulador HTTP (arquivos .ashx), e módulo HTTP (arquivos .asmx)

Compilados quando necessários e ligados aos recursos de montagem local e montagem de nível alto.

Temas, páginas mestra, e outros arquivo de origem.

Arquivo de capa para temas individuais, páginas mestra, e outras arquivos de código fonte referenciados por páginas são compilados quando a página que o referencia é compilada.

Montagens compiladas são cacheadas no servidor e reusadas nas solicitações subsequentes e são preservadas ao se reiniciar o aplicativo, enquanto o código fonte não for mudado.

Devido ao fato do aplicativo ser compilado na primeira solicitação, a solicitação inicial à um aplicativo pode ser significativamente mais demorada que as seguintes.Você pode pré-compilar seu aplicativo para reduzir o tempo necessário para a primeira solicitação.Para obter mais informações, consulte Como: Precompile ASP.NET Web Sites.

Reiniciar o Aplicativo

Modificações no código fonte de seu aplicativo Web farão com que o ASP.NET recompile os arquivos fontes em montagens.Quando você modifica os itens de alto nível no seu aplicativo, todas as outras montagens no seu aplicativo que referenciam as montagens de alto nível são recompiladas também.

Como resultado, modificar, adicionar, ou deletar certos tipos de arquivos de dentro da pasta do aplicativo fará com que esse reinicie.As seguinte ações farão o aplicativo reiniciar:

  • Adicionando, modificando ou deletando montagens da pasta Bin do aplicativo.

  • Adicionando, modificando, ou deletando recursos de localização das pastas App_GlobalResources ou App_LocalResources.

  • Adicionando, modificando, ou deletando o arquivo Global.asax do aplicativo.

  • Adicionando, modificando, ou deletando arquivos de código fonte do diretório App_Code.

  • Adicionando, modificando, ou deletando configurações de perfil.

  • Adicionando, modificando, ou deletando referências de serviços Web no diretório App_WebReferences.

  • Adicionando, modificando, ou deletando o arquivo Global.asax do aplicativo.

Quando a reinicialização de um aplicativo é necessária, ASP.NET servirá todas as solicitações pendentes dos domínios existentes do aplicativo e as montagens antigas antes de reiniciar o domínio do aplicativo e carregar as novas montagens.

Módulos HTTP

O ciclo de vida de um aplicativo ASP.NET é extensível através da classe IHttpModule.ASP.NET inclui algumas classes que implementam IHttpModule, como a classe SessionStateModule.Você também pode criar sua própria classe que implementa IHttpModule.

Se você adiciona módulos ao seu aplicativo, esses módulos por si só podem criar eventos.O aplicativo pode inscrever-se nesses eventos no arquivo Global.asax utilizando a convenção nome do módulo_nome do evento.Por exemplo, para manipular o evento Authenticate criado por um objeto FormsAuthenticationModule, você pode criar um manipulador chamado FormsAuthentication_Authenticate.

The SessionStateModule classe é ativada por padrão, no ASP.NET. Todos sistema autônomo eventos de sessão são automaticamente conectados sistema autônomo Session_event, such sistema autônomo Session_Start. O evento Start é criado cada vez que uma nova seção é criada.Para obter mais informações, consulte Visão geral sobre Estado de sessão ASP.NET.

Consulte também

Conceitos

Visão Geral do Ciclo de Vida da Página ASP.NET

Visão geral do ASP.NET

Visão geral da Compilação do ASP.NET

Outros recursos

O ASP.NET e configuração do IIS