INFO: Instâncias do aplicativo, eventos de aplicativo e Application State no ASP.NET

Traduções deste artigo Traduções deste artigo
ID do artigo: 312607 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

O objeto ASP.NET HttpApplication oculta muitos conceitos complexos para simplificar o modelo de programação. Este artigo descreve algumas dessas complexidades. Além disso, este artigo descreve como o ASP.NET lida com problemas de compatibilidade com o objeto de aplicativo do Microsoft Active Server Pages (ASP) clássico.

Este artigo está dividido em seções a seguir:

Mais Informações

Classe de aplicativo e instâncias do aplicativo

Uma classe de aplicativo é definida no arquivo global.asax. O código no global.asax define uma nova classe é derivada de System.Web.HttpApplication . Na ausência de um arquivo global.asax, a classe base, HttpApplication , é usada como a classe de aplicativo.

O runtime do ASP.NET cria como muitas instâncias de classes do aplicativo conforme necessário para processar solicitações simultaneamente. Para a maioria dos aplicativos, esse número é limitado ao número de segmentos e permanece no intervalo de 1 a 100, dependendo do hardware, carga do servidor, configuração e assim por diante. Muitas solicitações reutilizar instâncias do aplicativo e uma lista livre de instâncias do aplicativo é mantida durante períodos de carga reduzida. Instâncias do aplicativo são usadas em uma forma de thread-safe, ou seja, uma solicitação por vez. Isso tem implicações importantes:
  • Não é necessário se preocupar sobre bloqueio ao acessar membro não estático a classe de aplicativo.
  • Código do aplicativo pode armazenar dados de solicitação para cada solicitação em membros não-estático da classe de aplicativo (mas não após o evento EndRequest porque esse evento pode manter a solicitação para um longo tempo).
Como membros estáticos de qualquer classe, inclusive uma classe de aplicativo, não são thread-safe, o código do usuário deve fornecer proteção apropriada para acessar membros estáticos. Isso se aplica a qualquer membro estático que você adicionar a classe de aplicativo.

Use as diretrizes a seguir para acessar a instância do aplicativo que está associada com a solicitação atual:
  • No global.asax, use a Este ou objeto me .
  • De uma página, cada página inclui uma propriedade de ApplicationInstance fortemente tipados.
  • A partir do objeto HttpContext , use a propriedade HttpContext.ApplicationInstance (que você digita como HttpApplication ).
Observação Porque o aplicativo se refere ao dicionário de estado do aplicativo global do ASP clássico, ASP.NET usa ApplicationInstance e não o aplicativo como um nome de propriedade para referir-se a instância do aplicativo que processa a solicitação atual.

Eventos do aplicativo

O tempo de vida de uma solicitação consiste em uma série de eventos de aplicativo (e algumas etapas implícitas que o ASP.NET implementa). Esses eventos estão listados abaixo na ordem em que são executadas:
  1. BeginRequest
  2. evento AuthenticateRequest
  3. Evento interno DefaultAuthentication
  4. evento AuthorizeRequest
  5. evento ResolveRequestCache
  6. Etapa interna para "mapa manipulador" (quando compilação ocorre, uma instância de página é criada)
  7. evento AcquireRequestState
  8. evento PreRequestHandlerExecute
  9. Etapa interna para "executar o manipulador" (quando o código de página é executado)
  10. evento PostRequestHandlerExecute
  11. evento ReleaseRequestState
  12. Etapa interna para filtro de respostas UpdateRequestCache evento
  13. evento UpdateRequestCache
  14. evento EndRequest
Observação Se você usar Server.Transfer ou Response.Redirect(string) , a solicitação atual será interrompida com eficiência e alguns dos eventos que estão listados acima não serão gerados. No entanto, o evento EndRequest será gerado neste cenário.

Os itens a seguir podem manipular esses eventos:
  • Estrutura da página ASP.NET interna (por exemplo, as etapas 6, 9 e 12 na lista anterior).
  • Módulos HTTP estão configurados para o aplicativo. Lista de módulos HTTP padrão é definida no arquivo Machine.config.
  • O código no global.asax, que é conectado através do método Application_ [EventName Ligado] ou que está conectado explicitamente quando você adiciona manipuladores de eventos para um nome de manipulador alternativo.
Cada evento pode ter assinantes síncronos e assíncronos. Assinantes assíncronos são executados primeiro. Nem todos os eventos são sempre executados; o único evento que sempre é executado é EndRequest . Executar como resultado, a limpeza de after-request todos os no evento EndRequest .

Observação Na maioria dos casos, a resposta real é enviada para o cliente após a instância do aplicativo com a resposta (que é depois EndRequest ).

Application_OnStart e Application_OnEnd

ASP.NET apresenta os exclusivos Application_OnStart e Application_OnEnd "eventos" para compatibilidade com o ASP clássico. Esses "eventos" são executados apenas uma vez na vida útil de um aplicativo e não para cada instância do aplicativo. Portanto, se você alterar os membros não-static esses métodos, você afeta apenas um aplicativo instância e não todas as instâncias. Você pode inicializar uma instância de aplicativo no construtor ou substituindo o método de inicialização .

Application_OnStart é um equivalente lógico para o construtor de classe para a classe de aplicativo, mas ele oferece uma vantagem: o código tem acesso para o HttpContext para a primeira solicitação para o aplicativo.

Estado do aplicativo

Estado do aplicativo é um dicionário global de objetos de ligação tardia, que apresenta o ASP clássico para compensar a ausência de variáveis globais no Microsoft Visual Basic Scripting Edition (VBScript). No ASP.NET, você pode acessar o estado do aplicativo através de um destes procedimentos:
  • propriedade de aplicativo (que é definida nas classes HttpApplication e página )
  • HttpContext.Application
ASP.NET inclui o estado do aplicativo principalmente para compatibilidade com o ASP clássico para que ele seja mais fácil de migrar aplicativos existentes para ASP.NET. É recomendável que você armazene dados em membros estáticos da classe de aplicativo em vez de no objeto Application . Isso aumenta o desempenho porque você pode acessar uma variável estática mais rápido do que você pode acessar um item no aplicativo dicionário.

Para acessar membros de aplicativo estático de páginas no Microsoft Visual translation from VPE for Csharp .NET e Microsoft Visual Basic .NET, você deve usar o atributo ClassName no global.asax para nomear sua classe de aplicativo. Para exemplo:
<%@ Application Language="C# | VB" ClassName="MyClass" %>
				
se um membro estático é denominado MyStaticMember no seu arquivo global.asax, você poderá usar MyClass.MyStaticMember para acessá-lo na sua página.

Propriedades

ID do artigo: 312607 - Última revisão: quarta-feira, 21 de janeiro de 2004 - Revisão: 5.3
A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Palavras-chave: 
kbmt kbappdev kbhttpruntime kbinfo kbstate KB312607 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 312607

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com