Exportar (0) Imprimir
Expandir Tudo

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 mesmo e descrevendo como o código que você escreve pode ser inserido no ciclo de vida do aplicativo.

As informações deste tópico se aplica ao IIS 5.0 e 6.0 do IIS .
Para obter informações sobre o ciclo de vida do aplicativo ASP.NET em IIS 7.0, consulte Uma visão geral do Ciclo de Vida do Aplicativo ASP.NET para o IIS 7.0.

Dentro do ASP.NET, vários processos que devem ocorrer para um aplicativo ser inicializado e solicitações de processos.

Além disso , o ASP.NET é somente uma parte da arquitetura do servidor Web que solicitações de serviços 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.

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

Estágio

Descrição

Usuário solicita um recurso de aplicação do servidor Web.

O ciclo de vida de um aplicativo ASP.NET começa com uma solicitação enviada por um navegador para o servidor Web (para aplicativos ASP.NET , tipicamente IIS).
O ASP.NET é uma extensão ISAPI sob o servidor web. Quando um servidor Web recebe uma solicitação, ele examina a extensão do arquivo solicitado, determina qual extensão ISAPI deve lidar com o pedido, e então passa a solicitação para a extensão ISAPI apropriada.
ASP.NET manipula extensões de nome de arquivo que foram mapeadas , como . aspx , . ascx , . ashx e .asmx.

ObservaçãoObservação:
Se uma extensão de nome de arquivo não foi mapeada para o ASP.NET, ASP.NET não irá receber o pedido. Isso é importante para entender aplicativos que usam autenticação ASP.NET. Por exemplo, pelo fato de arquivos .htm normalmente não serem mapeados para ASP.NET, o 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çãoObservação:
Se você criar um manipulador personalizado para atender a uma extensão de nome de arquivo específico, você deve mapear a extensão para o ASP.NET no IIS e também registrar o manipulador no arquivo Web.config do seu aplicativo Para mais informação, consulte Visão Geral sobre Módulos HTTP e Manipuladores HTTP.

O ASP.NET recebe a primeira requisição da aplicação.

Quando ASP.NET recebe a primeira requisição para qualquer recurso em uma aplicação, uma classe chamada ApplicationManager cria um domínio da aplicação. Domínios de aplicativos provêm isolamento entre aplicações para variáveis globais e permitem que cada aplicação seja descarregada separadamente. Dentro do domínio da aplicação, uma instância de uma classe nomeada HostingEnvironment é criada, essa provê acesso à informação sobre a aplicação, como o nome da pasta onde ele está armazenado.

O diagrama seguinte ilustra a relação:

Gráfico de visão geral da topografia de aplicativo

ASP.NET também compila os itens de alto nível na aplicação, se necessário, incluindo código da aplicação na pasta App_Code.

Para obter mais informações , consulte " ciclo de vida de compilação " neste tópico .

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

Após a aplicação de domínio foi criado e o HostingEnvironment objeto instanciado, o ASP.NET cria e inicializa núcleo de objetos, como HttpContext, HttpRequeste HttpResponse.A classe HttpContext contém objetos que são específicos para a solicitação do aplicativo atual, como os objetos HttpRequest e HttpResponse.O objeto HttpRequest contém informações sobre a solicitação atual, incluindo informações sobre o navegador e cookies.O objeto HttpResponse contém a resposta que é enviada para o cliente, incluindo todas as saídas processadas e cookies.

Um objeto HttpApplication é atribuído à requisição

Depois que todos os objetos principais da aplicação foram iniciados, o aplicativo é iniciado criando uma instância da classe HttpApplication. Se a aplicação 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çãoObservação:
Na primeira vez que uma página ou processo ASP.NET é solicitado em uma aplicação, uma nova instância de HttpApplication é criada. No entanto, para maximizar o desempenho, instâncias HttpApplication podem ser reutilizadas por múltiplas requisições.

Quando uma instância de HttpApplication é criada, qualquer módulo configurado também é criado. Por exemplo, se a aplicação está configurada para fazê-lo, o ASP.NET cria o módulo SessionStateModule. Afinal de contas módulos configurados são criados, a classe HttpApplication quando o método Init for chamado.

O diagrama seguinte ilustra a relação:

Gráfico do ambiente de aplicativo

A solicitação é processada pelo pipeline HttpApplication.

Os eventos a seguir são executados pela classe HttpApplication enquanto a solicitação será processada.Os eventos são de interesse específico para os desenvolvedores que queiram estender a classe HttpApplication.

  1. Valide a solicitação , que examina as informações enviadas pelo navegador e determina se ele contém marcação potencialmente maliciosa .
    Para 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. Dispara o evento BeginRequest.

  4. Dispara o evento AuthenticateRequest.

  5. Dispara o evento PostAuthenticateRequest.

  6. Dispara o evento AuthorizeRequest.

  7. Dispara o evento PostAuthorizeRequest.

  8. Dispara o evento ResolveRequestCache.

  9. Dispara o evento PostResolveRequestCache.

  10. Baseia a extensão de nome do arquivo do recurso solicitado (mapeado no arquivo de configuração do aplicativo), selecionar uma classe que implementa IHttpHandler para processar a solicitação.Se a solicitação for para um objeto (página) derivados de classe Page e a página precisa ser compilado, o ASP.NET compila a página antes de criar uma instância dele.

  11. Dispara o evento PostMapRequestHandler.

  12. Dispara o evento AcquireRequestState.

  13. Dispara o evento PostAcquireRequestState.

  14. Dispara o evento PreRequestHandlerExecute.

  15. Chamar o método ProcessRequest (ou a versão assíncrona System#Web#IHttpAsyncHandler#BeginProcessRequest(HttpContexto, AsyncCallVoltar, Objeto) de apropriadas classes IHttpHandler para a solicitação.

    Por exemplo , se a solicitação for para uma página , a instância de página atual manipula a solicitação .

  16. Dispara o evento PostRequestHandlerExecute.

  17. Dispara o evento ReleaseRequestState.

  18. Dispara o evento PostReleaseRequestState.

  19. Resposta a filtragem se executar a propriedade Filter()()() estiver definida.

  20. Dispara o evento UpdateRequestCache.

  21. Dispara o evento PostUpdateRequestCache.

  22. Dispara o evento EndRequest.

  23. Dispara o evento PreSendRequestHeaders.

  24. Dispara o evento PreSendRequestContent.

Durante o ciclo de vida do aplicativo , o aplicativo gera eventos que você pode manipular e chama métodos especiais que você pode substituir .
Para manipular eventos de aplicativo ou métodos , 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 do HttpApplication processa apenas uma solicitação por vez .

Isto simplifica a manipulação de evento de aplicativo porque você não precisa bloquear Membros não-estático na classe de aplicativo quando você acessa -los .
Isso também permite que você armazenar dados específicos de solicitação em membros não-estático da classe application .
Por exemplo , você pode definir uma propriedade no arquivo global. asax e atribuir um valor de solicitação específica .

ASP.NET vincula automaticamente os eventos de aplicativo para manipuladores no arquivo Global.asax usando à convenção de nomenclatura Application_event, como Application_BeginRequest.

Isto é similar à maneira que métodos de página do ASP.NET são automaticamente vinculados a eventos , como evento de Page_Load da página .
Para mais detalhes, veja 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 chama uma vez durante a vida do domínio do aplicativo , não para cada instância de HttpApplication .

A tabela a seguir lista alguns dos eventos e métodos que são utilizados durante o ciclo de vida da aplicação. Há muito mais eventos do que os listados, mas eles não são comumente usados.

Eventos ou métodos

Descrição

Application_Start

Chamado quando o primeiro recurso (como uma página) em um aplicativo ASP.NET é solicitado .
O método Application_Start é chamado somente uma vez durante o ciclo de vida de um aplicativo .
Você pode usar esse método para executar tarefas de inicialização como carregar dados em cache e inicializando valores estáticos .

Você deve definir apenas dados estáticos durante o início da aplicação. Não defina qualquer dados instância porque estará disponível somente para a primeira instância da classe HttpApplication é criada.

Application_event

Erguido no momento apropriado do ciclo de vida do aplicativo , conforme listado na tabela de ciclo de vida de aplicação deste tópico .

Application_Error pode ser disparado em qualquer fase do ciclo de 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 que o aplicativo limpe os recursos .

Init

Chamada uma vez para cada instância da classe HttpApplication depois que todos os módulos foram criados.

Dispose

Chamado antes da instância do aplicativo ser destruída. Você pode usar este método para liberar manualmente quaisquer recursos não gerenciados. Para mais informações, consulte Limpeza de recursos não gerenciados.

Application_End

Chamado uma vez na vida útil do aplicativo antes que a aplicação seja descarregada.

Quando a primeira solicitação é feita para um aplicativo , o ASP.NET compila itens do aplicativo em uma ordem específica .
Os primeiros itens a serem compilados são referidos como os itens de nível superior. Após o primeira requisição, os itens de nível superior são recompilados somente se ocorrer uma mudança de dependência. A seguinte tabela descreve a ordem na qual os itens de alto nível do ASP.NET são compilados.

Item

Descrição

App_GlobalResources

Os recursos do aplicativo global são compilados e um conjunto de recursos é construído .
Todos os assemblies na pasta Bin do aplicativo estão ligados ao recurso assembly .

App_WebResources

Tipos de proxy para serviços da Web são criados e compilados .
O assembly resultante de referências da Web está ligado ao recurso assembly se ele existir .

Propriedades de perfil definidas no arquivo Web.config

Se as propriedades de perfil são definidas no arquivo de Web.config do aplicativo , um assembly é gerado , que contém um objeto de perfil .

App_Code

Arquivos de código fonte são compilados e um ou mais assemblies são criados.

Todos os assemblies do código e a montagem de perfil estão ligados aos recursos e Web faz referência a assemblies se for o caso .

O arquivo Global.asax

O objeto de aplicativo é compilado e ligado a todos os módulos (assemblies) gerado anteriormente .

Depois de tem sido compilados itens de nível superior do aplicativo , ASP.NET compila páginas , pastas e outros itens conforme necessário .
A tabela a seguir descreve a ordem na qual pastas e itens ASP.NET 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)

Compilado como necessários e vinculados à assembly de recursos locais e os assemblies de nível superior .

Themes, master pages , outros arquivos do fonte

Arquivos para temas individuais , páginas mestre e outro código fonte referenciados por páginas de arquivos são compilados quando a página de referência é compilada .

Módulos (assemblies) compilados é armazenados em cache no servidor e reusadas nas solicitações subseqüentes e são preservadas ao se reiniciar o aplicativo , como o código - fonte é inalterado .

Porque o aplicativo é compilado na primeira solicitação , solicitação inicial para um aplicativo pode levar consideravelmente mais tempo do que as solicitações subsequentes .
Você pode pré compilar seu aplicativo para reduzir o tempo necessário para a primeira solicitação .
Para mais informações, consulte Como: Pré-compilar projetos de sites do ASP.NET.

Reiniciar o Aplicativo

Modificar o código - fonte de seu aplicativo da Web fará com que o ASP.NET recompile arquivos fonte em módulos (assemblies) .
Quando você modificar os itens de alto nível no seu aplicativo , todos os outros assemblies que fazem referência os assemblies de nível superior no aplicativo são recompilados também .

Além disso , modificar , adicionar ou excluir determinados tipos de arquivos dentro de pastas conhecidas do aplicativo fará com que o aplicativo seja reiniciado .
As ações à seguir irão causar uma reinicialização do aplicativo:

  • Adicionando , modificando ou excluindo os assemblies da pasta Bin do aplicativo .

  • Adicionar, modificar ou excluir recursos de localização das pastas App_GlobalResources ou App_LocalResources.

  • Adicionando , modificando ou excluindo o arquivo global. asax do aplicativo .

  • Adicionando , modificando ou excluindo arquivos código - fonte no diretório App_Code .

  • Adicionar, modificar ou excluir a configuração do perfil.

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

  • Adicionando , modificando ou excluindo o arquivo de Web.config 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.

O ciclo de vida do aplicativo ASP.NET é extensível através de classes IHttpModule .
O ASP.NET inclui várias classes que implementam o IHttpModule , tais como a classe SessionStateModule.
Você também pode criar suas próprias classes que implementam IHttpModule .

Se você adicionar módulos para seu aplicativo , os módulos se podem elevar eventos .
O aplicativo pode assinar esses eventos no arquivo Global. asax , usando a convençãoNomeDoModulo_NomeDoEvento.
Por exemplo, para manipular o evento Authenticate criado por um objeto FormsAuthenticationModule, você pode criar um manipulador chamado FormsAuthentication_Authenticate.

O classe SessionStateModuleé ativada por padrão em 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 Start do evento é gerado sempre que uma nova sessão é criada. Para mais informação, consulte Visão geral sobre Estado de sessão ASP.NET.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft