C# - A Global.asax állomány használata

forráskód letöltése
ASP.NET-es alkalmazásaink készítésekor automatikusan létrejön egy Global.asax.cs forráskód. Ebben olyan eseményeket kaphatunk, melyek az alkalmazásunkra nézve globálisak. Ilyen például egy kérés kiszolgálás kezdetének, befejezésének eseménye, vagy az alkalmazásunk indítása, leállása.
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.
      sw.Close();
    }
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");
    }