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");
}