HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Milyen sorrendben következnek egy ASP.NET-es alkalmazás eseményei?


Példaprogram letöltése

10490 bájt

Amikor az APS.NET-es alkalmazásunk egy-egy kérést szolgál ki, akkor számtalan esemény fut le (Application_BeginRequest, Session_Start, Page_Load, stb.). Ahhoz, hogy programunk jól szervezett és helyesen működő legyen, igen fontos tudnunk, hogy milyen esetben milyen sorrendben követik egymást ezek az események.

Az események nyomon követésére egy olyan példaprogramot készítettünk, mely minden eseménynél egy-egy bejegyzést helyez el a Windows eseménynaplójába. Így onnan kiolvasva megtudhatjuk, hogy mi volt az események sorrendje az egyes esetekben.
Az eseménynapló APS.NET-es alkalmazásból történő eléréséhez módosítsuk az alapértelmezésben a C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\CONFIG könyvtárban lévő machine.config állományban a processModel bejegyzésnél a userName attribútumot system értékre, majd indítsuk újra a gépet.
        <processModel
            ...
            userName="system"
            ...
Készítünk egy Log nevű függvényt, mely elhelyez az eseménynaplóba egy üzenetet, melyet paraméterként adunk át a számára.
    public static void Log(string message)
    {
Az eseménynaplóba történő írás előtt ellenőrizzük, hogy létezik-e már a WebEventsLog nevű forrás. Ha még nem lenne ilyen, akkor létrehozzuk azt.
      if(!EventLog.SourceExists("WebEventsLog"))
      {
        EventLog.CreateEventSource("WebEvents", "WebEventsLog");
      }                                     
Ezt követően beírjuk a paraméterként kapott üzenetet.
      EventLog el = new EventLog();
      el.Source = "WebEvents";        
      el.WriteEntry(message);
    }
Ezek után, mind a Form1.cs eseményeihez, mind a Global.asax eseményeihez elhelyezünk egy-egy üzenetet, melyből tudni fogjuk, hogy hol keletkezett.
    protected void Application_Start(Object sender, EventArgs e)
    {
      Log("Application_Start");  
    }
A program futtatása után már rendelkezésünkre is áll a szükséges információ:
A program indítása
A programunk indításakor az alábbi sorrendben követik egymást az események:
  • Application_Start
  • Application_BeginRequest
  • Application_AuthenticateRequest
  • Session_Start
  • OnInit
  • Page_Load
  • Page_PreRender
  • Page_Unload
  • Application_EndRequest
Az Application osztály Start eseményéről tudnunk kell, hogy az csak a programunk első indulásakor fut le. A továbbiakban amíg az alkalmazásunk fut, ez az esemény már nem kerül meghívásra.
A gombra történő kattintás
Amikor a weblapon lévő gombra kattint a felhasználó, akkor egy PostBack történik és így egy újabb kérést kap az alkalmazásunk. Ekkor az alábbi sorrendben kapjuk az eseményeket:
  • Application_BeginRequest
  • Application_AuthenticateRequest
  • OnInit
  • Page_Load
  • Button1_Click
  • Page_PreRender
  • Page_Unload
  • Application_EndRequest
Megfigyelhető, hogy az események közé bekerült a Button1 gomb Click eseménye is.
Ami még nem volt
Két eseményt eddig még nem kaptunk meg egyszer sem.
Az egyik lesz a Session osztály End eseménye. Ez nyilván csak akkor jön létre, amikor egy adott folyamat (session) véget ér egy adott felhasználóval.
A másik az Application osztály End eseménye. Ez pedig csak akkor jön létre, ha már minden folyamat véget ért és az alkalmazásunkra sincs szükség a továbbiakban.
Ha a mellékelt példánál szeretnénk ezt a két eseményt is kipróbálni, akkor zárjuk be az összes böngészőt, melyben ez az alkalmazás futott és várakozzunk türelmesen addig, amíg a folyamat beállított határideje lejár. Ekkor megjelenik az eseménynaplóban ez a két üzenet is.
Amit még tudni kell
Amit a Page osztály Load eseményénél szoktunk elvégezni, mint kezdeti feladatokat azokra nem biztos, hogy szükség van minden olyan esetben amikor ez a web oldal betöltődik. Például ha egy gombra kattint a felhasználó és egy PostBack révén jutunk vissza erre a lapra, akkor sok esetben a kívánatos az lenne, ha csak a gomb Click eseménye futna és a Load esemény nem. Ezt nem tudjuk elkerülni, amint a fenti felsorolásokból is látható. Akár milyen módon is kerül megnyitásra a lap, a Page Load eseménye mindig lefut, ráadásul az esetleges Button Click eseménye előtt. Ezt kivédendő viszont használhatjuk az IsPostBack property-t. Ha ez igaz, akkor PostBack folyamat révén kerül a lap betöltésre, vagyis a gombon kattintás történt.
Ha az alábbi módon kiegészítjük a Page osztály Load eseményének kezelőjét, akkor a gombra történő kattintásnál „kivédhetjük” a Load eseménynél futó kódunkat.
    private void Page_Load(object sender, System.EventArgs e)
    {
     if (!IsPostBack)
        Global.Log("Page_Load");
    }  

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 360. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |