Az események alakulásának megfigyelésére létrehozunk egy belső függvényt, mellyel képesek vagyunk egy szöveges napló állományba beírni, hogy mikor melyik esemény jött létre.
public void AppendLog(string message)
{
Az állományba való íráshoz a StreamWriter osztályt használjuk. Ennek konstruktoránál első paraméterként megadjuk a napló állomány nevét elérési útvonallal, másodikként pedig egy igaz értéket, mely jelzi a StreamWriter osztálynak, hogy ha az állomány nem létezik, akkor azt létrehozhatja.
StreamWriter sw = new StreamWriter(Server.MapPath("GlobalAsax.log"), true);
Ezt követően kiírjuk az aktuális dátumot és időpontot az állományba.
sw.Write(DateTime.Now.ToString("G") + ": ");
Majd a paraméterként kapott üzenet szövegét is elhelyezzük benne.
sw.WriteLine(message+"<br>");
Végül zárjuk az állományt.
Alkalmazásunk indulásakor kerül meghívásra az Application_Start függvény.
protected void Application_Start(Object sender, EventArgs e)
{
AppendLog("Application_Start");
}
Az alkalmazásunk végén az Application_End függvény fut.
protected void Application_End(Object sender, EventArgs e)
{
AppendLog("Application_End [" + Session.SessionID + "]");
}
Egy kérés kiszolgálásának kezdetekor fut le az Application_BeginRequest. Itt, ha rögtön írunk a web oldalra a Response objektumon keresztül, akkor ezzel azt érjük el, hogy alkalmazásunk minden oldalán megjelenhet ugyanaz a kód.
protected void Application_BeginRequest(Object sender, EventArgs e)
{
AppendLog("Application_BeginRequest");
Response.Write("<a href=\"http://www.SoftwareOnline.hu\">Software Online</a>");
}
Egy kérés kiszolgálásának végén fut le az Application_EndRequest. Itt szintén lehetőségünk van adatok hozzáírására az elkészített web oldalhoz.
protected void Application_EndRequest(Object sender, EventArgs e)
{
AppendLog("Application_EndRequest");
Response.WriteFile(Server.MapPath("GlobalAsax.log"));
}
Egy-egy folyamat indulásakor kapjuk a Session_Start függvény hívást. Egy Session azonosít egy-egy klienssel fenntartott kapcsolatot. Ha például a mellékelt példában a frissítés gombra kattint, akkor látható lesz, hogy a Session_Start csak az első kérésnél kerül futtatásra. Ebből is következik, hogy a Session objektum SessionID értékével azonosíthatjuk az egyes folyamatokat, így felismerhetünk egy azonos helyről érkező kérést.
protected void Session_Start(Object sender, EventArgs e)
{
AppendLog("Session_Start [" + Session.SessionID + "]");
}
A folyamat végén lesz meghívva a Session_End függvény.
protected void Session_End(Object sender, EventArgs e)
{
AppendLog("Session_End [" + Session.SessionID + "]");
}
Egy Session-t programból is lezárhatunk. Ennek eredménye az lesz, hogy a következő kéréskor ismét meghívásra kerül a Session_Start. Ennek kipróbálásához helyezzünk el egy nyomógombot a WebForm1-en, majd a WebForm1.aspx.cs-ben a gomb Click eseménykezelőjébe írjuk a következőt:
private void Button1_Click(object sender, System.EventArgs e)
{
Session.Abandon();
Response.Redirect("WebForm1.aspx");
}