INFO: Instâncias de aplicações eventos de aplicações e estado da aplicação no ASP.NET

Traduções de Artigos Traduções de Artigos
Artigo: 312607 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

O objecto ASP.NET HttpApplication oculta muitos conceitos complexos para simplificar o modelo de programação. Este artigo descreve alguns destes complexidades. Além disso, este artigo descreve como o ASP.NET processa os problemas de compatibilidade com o objecto Microsoft Active Server Pages (ASP) aplicações clássico.

Este artigo está dividido nas seguintes secções:

Mais Informação

Classe de aplicação e instâncias de aplicações

Uma classe de aplicação é definida no ficheiro global.asax. O código de global.asax define uma nova classe que deriva System.Web.HttpApplication . Na ausência de um ficheiro global.asax, a classe base, HttpApplication , é utilizada como a classe de aplicação.

Tempo de execução ASP.NET cria como várias instâncias de classes de aplicação conforme necessário para processar pedidos em simultâneo. Para a maior parte das aplicações, este número é limitado ao número de threads e permanece no intervalo de 1 a 100, dependendo do hardware, carga do servidor, configuração e assim sucessivamente. Número de pedidos reutilizar instâncias da aplicação e uma lista livre de instâncias da aplicação é mantida durante períodos de carga reduzida. Instâncias de aplicação são utilizadas de uma forma optimizada para thread, ou seja, uma requisição de cada vez. Isto tem implicações importantes:
  • Não é necessário preocupar bloqueio ao aceder a membros não estático da classe aplicação.
  • Código da aplicação pode armazenar dados de pedido para cada pedido numa não estático membros da classe aplicação (mas não depois do evento EndRequest porque este evento poderá manter o pedido por um longo período de tempo).
Uma vez que membros estáticos de qualquer classe, incluindo uma classe de aplicação, não são thread de segurança, o código de utilizador tem de fornecer protecção adequada para aceder aos membros estáticos. Aplica-se a qualquer membro estático que adicionar à classe da aplicação.

Utilize as seguintes directrizes para aceder a instância da aplicação que está associada o pedido actual:
  • De global.asax, utilize a Este ou objecto me .
  • A partir de uma página, cada página inclui uma propriedade de ApplicationInstance vivamente escrito.
  • Do objecto HttpContext , utilize a propriedade HttpContext.ApplicationInstance (o que escrever como HttpApplication ).
Nota Porque aplicação refere-se ao dicionário de estado de aplicação globais em ASP clássico, o ASP.NET utiliza ApplicationInstance e não aplicação como um nome de propriedade para fazer referência a instância da aplicação que processa o pedido actual.

Eventos de aplicação

A duração de um pedido é constituída por uma série dos eventos de aplicação (e alguns passos implícitos que ASP.NET implementa). Estes eventos são listados abaixo pela ordem em que são executadas:
  1. BeginRequest
  2. evento AuthenticateRequest
  3. Evento interno DefaultAuthentication
  4. evento AuthorizeRequest
  5. evento ResolveRequestCache
  6. Passo interno para "mapa processador" (quando a compilação é efectuada, uma instância de página é criada)
  7. evento AcquireRequestState
  8. evento PreRequestHandlerExecute
  9. Passo interno para "executar a rotina de tratamento" (quando é executado o código de página)
  10. evento PostRequestHandlerExecute
  11. evento ReleaseRequestState
  12. Passo interno para filtro respostas UpdateRequestCache evento
  13. evento UpdateRequestCache
  14. evento EndRequest
Nota Se utilizar o método Server.Transfer ou Response.Redirect(string) , o pedido actual eficazmente for interrompido e alguns dos eventos que são listados acima não irão ser aumentado. No entanto, o evento EndRequest irá ser aumentado neste cenário.

Os seguintes itens podem tratar estes eventos:
  • Estrutura de páginas ASP.NET interna (por exemplo, os passos 6, 9 e 12 na lista anterior).
  • Módulos de HTTP estão configurados para a aplicação. A lista predefinida de módulos de HTTP é definida no ficheiro Machine.config.
  • Código de global.asax que é ligado através do método Application_ [activado] NomeDoAcontecimento ou que é ligado explicitamente quando adiciona processadores de eventos para um nome alternativo do processador.
Cada evento pode ter os subscritores síncronos e assíncronos. Os subscritores assíncronos são executados pela primeira vez. Nem todos os eventos são sempre executados; o evento único que é sempre executado é EndRequest . Como resultado, efectuar limpeza de after-request tudo no evento EndRequest .

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

Aos eventos Application_OnStart e Application_OnEnd

O ASP.NET apresenta "os exclusivos eventos Application_OnStart e Application_OnEnd" para compatibilidade com o ASP clássico. Estes "eventos" são executados apenas uma vez pela duração de uma aplicação e não para cada instância da aplicação. Por conseguinte, se alterar os membros não estático estes métodos, está a afectar instância única aplicação e não todas as instâncias. Pode iniciar uma instância de aplicação no construtor ou por substituir o método de inicialização .

evento Application_OnStart é um equivalente lógico para o Construtor de classe para a classe de aplicação, mas oferece uma vantagem: o código tem acesso para HttpContext para o primeiro pedido à aplicação.

Estado da aplicação

Estado da aplicação é um dicionário global de objectos dependentes do atraso, 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, pode aceder o estado da aplicação através de um dos seguintes procedimentos:
  • propriedade da aplicação (o que é definida nas classes HttpApplication e página )
  • HttpContext.Application
O ASP.NET inclui estado da aplicação principalmente para compatibilidade com o ASP clássico para que seja mais fácil migrar aplicações existentes para o ASP.NET. É recomendado que armazene dados em membros estáticos da classe aplicação em vez de no objeto Application . Isto aumenta o desempenho porque pode aceder a uma variável estática mais rapidamente do que pode acessar um item na aplicação do dicionário.

Para aceder membros estáticos de aplicação a partir de páginas no Microsoft Visual C# .NET e Microsoft Visual Basic. NET, tem de utilizar o atributo de nome da classe em global.asax para nome de classe de aplicação. Para exemplo:
<%@ Application Language="C# | VB" ClassName="MyClass" %>
				
se um membro estático chama MyStaticMember no ficheiro global.asax, pode utilizar MyClass.MyStaticMember para aceder a partir da página.

Propriedades

Artigo: 312607 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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