Global.asax Dosyası

Eyl 06, 2013

Visual Studio'da ASP.NET bir proje oluşturulduğunda iki adet özel dosya daha yaratılmaktadır. Bunların biri web.config diğeri ise Global.asax dosyalasıdır. Eğer projede Global.asax dosyası oluşturulmamış ise, Solution Explorer üzerine sağ tıklanarak Add New Item seçilir ve Global.asax dosyası oluşturulur.



Buradan Global Application Class seçeneği işaretlenir ancak dosyanın adı değiştirilemez. .Net dosyayı sadece Global.asax ismiyle çalıştırmaktadır.

Global.asax dosyasının eklenmiş şekli ve .cs aşağıdaki gibidir.

Global.asax dosyası yalnızca sunucu (server) üzerindeki çalışan bir dosyadır, içinde sunucu tabanlı kodlar barındırır. Kullanıcılar tarafından hiçbir şekilde ulaşılamazlar. Bu sayede güvenli bir şekilde dosya kullanılabilir. 
Global.asax dosyası oluşturulduğunda içinde varsayılan olarak 7 adet metot bulunur. Bu metotlar application nesnesinin olay yakalayıcı (event handler) metotlarıdır. "Application" nesnesi ise durum yönetimini sağlayabilmek ve uygulama genelinde kullanılacak nesneleri saklamak amacıyla kullanılmaktadır. Fakat "application" nesnesinin olayları(eventleri) ele alınarak uygulamayla ilgili belirli aşamalarda birçok önemli işlem de gerçekleştirilebilir. Aşağıda, Global.asax dosyasının oluşturulduğu ilk hali gösterilmiştir.

public class Global : System.Web.HttpApplication 

    { 
        protected void Application_Start(object sender, EventArgs e) 
        {

        }        protected void Session_Start(object sender, EventArgs e) 
        { 

        } 
        protected void Application_BeginRequest(object sender, EventArgs e) 
        { 

        } 
        protected void Application_AuthenticateRequest(object sender, EventArgs e) 
        { 

        } 
        protected void Application_Error(object sender, EventArgs e) 
        { 

        } 
        protected void Session_End(object sender, EventArgs e) 
        { 

        } 
        protected void Application_End(object sender, EventArgs e) 
        { 

        }

    }

Appication Start: ASP.NET uygulaması çalıştırıldığı anda tetiklenir. Sunucuya ilk istek gittiğinde ve uygulama tekrar başlatığında çalışır.

Application End: ASP.NET uygulaması kapatıldığında tetiklenen olaydır. Bu olay içerisinde ise genellikle "start" olayında başlatılan, açılan kaynaklarını nesnelerin durdurulması ve kapatılması gibi işlemler gerçekleştirilir. 

Session Start: Herhangi bir ziyaretçi Web sitesini açtığında tetiklenir. Bu olay istemcinin sayfayı ilk açtığında tetiklenir. Belirlenen oturum süresi aşıldığında ziyaretçinin yaptığı işlem yani bir kullanıcı olarak algılanır ve o şekilde kaydolur.

       protected void Session_Start(object sender, EventArgs e
       {
          int onlineKullaniciSayisi=Convert.ToInt32(Application["kullaniciSayisi"]); 
          onlineKullaniciSayisi++;// Her kullanıcı giriş yaptığında 1 artar. 
          Application.Lock(); 
          Application["kullaniciSayisi"] = onlineKullaniciSayisi; 
          Application.UnLock();

          //Lock metodu anlık olarak uygulama nesnesini farklı bir kullanıcının erişimine kapatırken, UnLock metodu da kapatılan nesneyi tekrar açar.

         }

Session End: Siteyi ziyaret eden kullanıcının zaman aşımı süresi dolduğunda tetiklenen olaydır.

protected void Session_End(object sender, EventArgs e) 
        { 
            int onlineKullaniciSayisi = Convert.ToInt32(Application["kullaniciSayisi"]); 
            onlineKullaniciSayisi--; 
            Application.Lock(); 
            Application["kullaniciSayisi"] = onlineKullaniciSayisi; 
            Application.UnLock();
        } 

Application Error: Uygulamanın herhangi bir yerinde hata oluştuğunda bu olay tetiklenir. Özellikle
kayıt dosyalarında hata kayıtlarının tutulması işlemi için uygulamamızın en uygun noktası "Application Error" olayıdır.
Hatalar bir .txt dosyasına kaydedilebilir ya da sunucu tarafından kayıtlı bir e-posta adresine e-posta gönderilebilir.

protected void Application_Error(object sender, EventArgs e) 
        { 
            StreamWriter hd = new StreamWriter(Server.MapPath("~HataDosyasi.txt"), true); 
            //Oluşan hatalar HataDosyasi adlı bir dosyaya kaydediliyor. 
            hd.WriteLine(DateTime.Now.ToString()); 
            //Server nesnesini GetLastError metodu sunucuda oluşan son hatayı Exception tipinden getirir. Bu da şu an oluşan hata olacaktır. 
            if (Server.GetLastError().InnerException != null) 
                hd.WriteLine(Server.GetLastError().InnerException.Message); 
            else 
                hd.WriteLine(Server.GetLastError().Message); 
            //Request nesnesinin Path özelliği şu an istekte bulunulan sayfanın yol bilgisini getirir.
            hd.Write(Request.RawUrl != null ? Request.RawUrl : ""); 
            hd.WriteLine(); 
            hd.Close();
           } 

Begin Request: Uygulamadaki herhangi bir dosyaya talep geldiğinde tetiklenir. Gelen talebin durumuna göre farklı işlemler yapılmak istenirse (farklı sayfalara yönlendirme, farklı içerik görüntüleme, sayfaya veya dosyaya erişimi engelleme gibi) bu olay ele alınabilir. "URL Rewritng" veya dosyaya erişimin kontrol edilmesi gibi durumlarda kullanılabilir.

AuthenticateRequest: FormsAuthentication kullanıldığında kullanıcının sisteme başarılı bir şekilde giriş yapması durumunda tetiklenecek olan olaydır. Giriş yapan kullanıcının kimliğine bakılarak yetkilendirme, yönlendirme gibi işlemler bu olay sayesinde ele alınabilir. Örneğin; giriş yapan kullanıcıyı belirli bir role atama işlemi burada yapılabilir.