INFORMACE: Instance aplikace události aplikace a stavu aplikace v technologii ASP.NET

Souhrn

Objekt ASP.NET HttpApplication skryje mnoho složité pojmy pro zjednodušení programovacího modelu. Tento článek popisuje některé tyto složitosti. Kromě toho tento článek popisuje, jak technologie ASP.NET zpracovává problémy s kompatibilitou s klasickou objektu Microsoft stránek ASP (Active Server) aplikace .

Tento článek je rozdělen do následujících částí:

Další informace

Třída aplikace a instance aplikace

Třída aplikace je definována v souboru Global.asax. Kód v souboru Global.asax definuje novou třídu, která je odvozena z System.Web.HttpApplication. V případě neexistence souboru Global.asax základní třídy HttpApplicationslouží jako třídy aplikace.

Modul runtime technologie ASP.NET vytvoří tolik instance třídy aplikace podle potřeby zpracování požadavků současně. Pro většinu aplikací toto číslo je omezen počet podprocesů a v rozsahu 1 až 100 v závislosti na hardwaru, zatížení serveru, konfigurace a tak dále. Mnoho požadavků znovu použít instance aplikace a během období nižšího zatížení je veden volného seznamu instancí aplikace. Instance aplikace jsou použity bezpečným způsobem, to znamená jeden požadavek současně. To má důležité dopady:
  • Nemusíte starat o uzamčení při přístupu k nestatické členy třídy aplikace.
  • Kód aplikace může ukládat data požadavku pro každý požadavek v nestatické členy třídy aplikace (ale není po události EndRequest protože tato událost může udržovat požadavek na dlouhou dobu).
Protože statické členy libovolné třídy, včetně třídu aplikace nejsou bezpečné pro vlákna, musí poskytnout příslušné zamykání pro přístup k statické členy kód uživatele. To platí pro statický člen, který přidáte do třídy aplikace.

Přístup k instanci aplikace, který je přidružen k aktuální žádosti se řiďte následujícími pokyny:
  • Z Global.asax použijte Tento nebo Me objektu.
  • Ze stránky každá stránka obsahuje vlastnost ApplicationInstance silnými typy.
  • Z objektu HttpContext pomocí vlastnosti HttpContext.ApplicationInstance (který zadáte jako HttpApplication).
Poznámka: Protože se aplikace odkazuje na slovníku stavu globální aplikace v klasickém prostředí ASP, technologie ASP.NET používá ApplicationInstance a aplikace jako název vlastnosti odkazovat na instanci aplikace, která zpracovává aktuální žádosti.

Události aplikace

Dobu trvání požadavku sestává z řady událostí aplikace (a některé implicitní kroky, které technologie ASP.NET implementuje). Tyto události jsou uvedeny v pořadí, ve kterém jsou prováděny:
  1. BeginRequest
  2. AuthenticateRequest událostí.
  3. Vnitřní událost DefaultAuthentication
  4. AuthorizeRequest událost
  5. ResolveRequestCache události
  6. Vnitřní kroku "mapování obslužné rutiny" (když probíhá kompilace stránky instance je vytvořena)
  7. Událost AcquireRequestState
  8. Události PreRequestHandlerExecute
  9. Vnitřní kroku "spustit rutinu" (kód stránky provedení)
  10. Události PostRequestHandlerExecute
  11. ReleaseRequestState událostí
  12. Vnitřní krok filtru odpovědi UpdateRequestCache událostí
  13. UpdateRequestCache událostí
  14. Událost EndRequest
Poznámka: Pokud použití Server.Transfer nebo Response.Redirect(string)aktuální požadavek efektivně přerušena a některé události, které jsou uvedeny výše nebude vyvolána. V tomto scénáři bude však vyvolána událost EndRequest .


Tyto události může zpracovávat následující položky:
  • Vnitřní rámec stránky technologie ASP.NET (například kroky 6, 9 a 12 v předchozím seznamu).
  • Moduly HTTP, které jsou nakonfigurovány pro aplikaci. Výchozí seznam modulů HTTP je definován v souboru Machine.config.
  • Kód v souboru Global.asax, která je připojili prostřednictvím metody Application_ [Zapnuto] EventName nebo který je připojili explicitně při přidání obslužné rutiny události pro rutinu alternativní název.
Každá událost může mít synchronní a asynchronní odběratelům. Nejprve jsou spouštěny asynchronní odběratelům. Ne všechny události jsou vždy provedeny; jediná událost, která je vždy spuštěn, je EndRequest. V důsledku toho proveďte vyčištění všechny následné žádosti pro událost EndRequest .

Poznámka: Ve většině případů je skutečnou odpověď zaslána klientovi po dokončení instance aplikace s odpovědí (což je po EndRequest).

Application_OnStart a Application_OnEnd

Technologie ASP.NET přináší jedinečný Application_OnStart a Application_OnEnd "události" s klasickou ASP kompatibilitu. Tyto "události" jsou provedeny pouze jednou v průběhu životnosti aplikace, nikoli pro každou instanci aplikace. Proto pokud změníte nestatické členy v těchto metodách, ovlivní všechny instance a instance pouze jednu žádost. Jedna instance aplikace v konstruktoru nebo přepsání metodu Inicializace možné inicializovat.

Application_OnStart je logický ekvivalent konstruktoru třídy pro třídu aplikace, ale nabízí jednu výhodu: kód má přístup k HttpContext pro první žádost aplikace.

Stav aplikace

Stav aplikace je globální slovník pozdní vazbou objekty, které klasická technologie ASP zavádí kompenzovat absenci globální proměnné v jazyce Microsoft Visual Basic Scripting Edition (VBScript). V technologii ASP.NET dostanete stav aplikace prostřednictvím jedné z následujících akcí:
  • Vlastnosti aplikace (která je definována v třídy HttpApplication a stránku )
  • HttpContext.Application
Technologie ASP.NET obsahuje stav aplikace, především z důvodu kompatibility se klasická technologie ASP, takže je snazší migrace existujících aplikací technologie ASP.NET. Je vhodné ukládat data ve statické členy třídy aplikace místo do objektu Application . To zvyšuje výkon, protože mají přístup k statické proměnné rychleji, než se zobrazí položky ve slovníku aplikace.

Pro přístup k aplikaci statické členy ze stránek Microsoft Visual C# .NET a Microsoft Visual Basic .NET, musíte použít atribut ClassName v souboru Global.asax název třídy vaší aplikace. Například:
<%@ Application Language="C# | VB" ClassName="MyClass" %>
Pokud statický člen je pojmenované MyStaticMember v souboru Global.asax, můžete použít MyClass.MyStaticMember přístup ze stránky.
Vlastnosti

ID článku: 312607 - Poslední kontrola: 9. 1. 2017 - Revize: 1

Váš názor