Global.asax Dosyasının Etkin Kullanımı

.NET programcılığı Global.asax Dosyasının Etkin Kullanımı Programlama Dilleri hakkında bilgi paylaş; Visual Studio .NET ile yeni bir proje yarattığınızda iki özel dosya da yaratılmaktadır. Bunlardan biri web....
Cevapla
WebMasTer SiTeSi
 
Seçenekler
  #1  
Arama 24-01-2008, 01:55
Banlı
Üyelik Tarihi: 18/09/07
Mesajlar: 1.551
 
     WS-Ticareti: (1)
Blog Yazıları: 1
Teşekkürleri: 0
20 Msg. 27 Tşkr.
Rep Gücü: 0 B737 rep gücü epey yüksek

Global.asax Dosyasının Etkin Kullanımı

Visual Studio .NET ile yeni bir proje yarattığınızda iki özel dosya da yaratılmaktadır. Bunlardan biri web.config diğersi ise global.asax dosyasıdır. Bu makalade global.asax dosyası içerisinde yer alan kısımlardan bir kısmına değinerek projelerinizde hangi kısımlarda kullanabileceğinizi inceliyor olacağız.

Güvenlik İçin Global.asax

Öncelikle global.asax dosyası sadece server üzerindeki uygulama içerisinde çalışan bir dosyadır, bunun anlamı dosya dışarıdan çağırıldığında istemciye asla görüntülenmeyecektir. Böylelikle güvenli bir şekilde bu dosyayı kullanabiliriz. Bir ek bilgi olarak aynı şekilde web.config dosyası da dışarıdan gelecek isteklere yanıt vermemektedir. Bunu örnekleyecek olursak; örneğin bir SQL Bağlantı cümlesini her sayfada ayrı ayrı yaratıp kullanmak yerine, bu iki dosyadan birinde yaratıp, içeriğini de registry içirisinde şifrelenmiş olarak tuttuğunuz bağlantı string'inden alabilirsiniz. Böylece güvenli uygulamalar noktasında ciddi bir adım atmış olacaksınız.

ASP'deki Global.asa'dan Farkı

Global.asax dosyası ASP ile uygulama geliştirmiş kişilere yabancı gelmemektedir, çünkü ASP 3.0'da da global.asa diye bir dosya vardı, ama sadece 4 olay ile ilgili işlem yapabiliyordunuz; SessionOnStart, SessionOnEnd, ApplicationOnStart, ApplicationOnEnd. Oysa ASP.NET'de yer alan global.asax dosyasında 16 farklı olay için kod yazabildiğiniz gibi ASP.NET 2.0 içerisinde bu sayı da artacaktır.

Hemen bir örnek uygulama ile başlayalım; çok klasik olsa da bize Application ve Session konusunu iyi anlattığı için bu örneği yapacağım: "Sitede aktif kaç kişi var". Bunu nasıl bulabiliriz diye düşündüğümüzde, eğer siteye giriş yapan her kullanıcı için oturum bazında değişken olan Application değişkeninin değerini bir arttırır, siteden biri çıkış yaptığında bir azaltırsam bu Application değeri her zaman bana sitede kaç kişinin bulunduğunu verecektir. Nasıl yapıldığına kısa bir göz atalım:

Global.asax Dosyası:

Sub Application_Start(ByVal Sender As Object, ByVal e As EventArgs)
Application("totalusercount") = 0
End Sub

Sub Session_Start(ByVal Sender As Object, ByVal e As EventArgs)
Dim CurrentUserCount As Integer
Dim NewUserCount As Integer
CurrentUserCount = CInt(Application("TotalUserCount"))
NewUserCount = (CurrentUserCount + 1)
Application("TotalUserCount") = NewUserCount
End Sub

Sub Session_End(ByVal Sender As Object, ByVal e As EventArgs)
Dim CurrentUserCount As Integer
Dim NewUserCount As Integer
CurrentUserCount = CInt(Application("TotalUserCount"))
NewUserCount = (CurrentUserCount - 1)
Application("TotalUserCount") = NewUserCount
End Sub


Örnek kodda da görüldüğü gibi Application_Start olayında sitedeki toplam kullanıcı sayısını tutacak olan değişken olan totalusercount değişkeni 0 olarak belirlenmiştir. Ardından her yeni oturum açıldığında yani Session_Start anında toplam sayı bir arttırılmış, her oturum kapanışında yani Session_End anında toplam sayu bir eksiltilmiştir. Böylelikle site için yazacağım aşağıdaki gibi bir kod her zaman bana sitedeki aktif kullanıcıların sayısını verecektir:

aktif_kullanicilar.aspx

<strong>Sitedeki aktif kullanıcılar:&nbsp;&nbsp;</strong>
<asp:Label id="aktif_sayi" runat="server" font-bold="True" forecolor="Blue">
<p><asp:Button id="cmd_Abandon" runat="server" Text="Abandon"></asp:Button></p>
</asp:Label>


Bu ASP.NET sayfasının arka planındaki kodda ise şunu yazmamız yeterli olacaktır:

aktif_kullanicilar.aspx.vb

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
aktif_sayi.Text = Application("TotalUserCount").ToString()
End Sub


Görüldüğü gibi aktif_sayi adlı Label sunucu kontrolüne arka plandaki koddan sitede kaç kişinin olduğu bilgisini atadım. Örnek ekran görüntüsüne bakacak olursak:



Görüldüğü gibi sitedeki aktif kullanıcı sadece ben olduğum için 1 sonucunu elde ettim. Bu sayfadan daha fazla sayıda açarsanız açtığınız sayı kadar sayının arttığını göreceksiniz. Şimdi ilginç bir şey dikkatinizi çekti mi? Nerden çıktı bu "© Mehmet Nuri Çankaya" ifadesi. İşte yeni bir özellikle daha karşı karşıyayız. Global.asax dosyamızda bulunan şu satır bize bunu sağladı:

Global.asax Dosyası:

Sub Application_EndRequest(ByVal Sender As Object, ByVal e As EventArgs)
Response().Write("&copy; Mehmet Nuri ÇANKAYA")
End Sub


Koddan da anlaşıldığı gibi sunucu tüm sayfaları ürettikten sonra hepsinin sonuna bir de Application_EndRequest kısmında bir ifade yazıldıysa bunu ekliyor. Böylelikle sitede standart olarak göstermek istediğiniz metinleri bu yöntemle ekleyebilirsiniz.

Hata Oluştuğunda Event Log'a Kayıt Etmek

Site içerisinde bir hata oluştuğunda bu hatadan haberdar olmak istiyorsunuz, böylece hatayı çözebilesiniz. Peki ama bunu nasıl yapacaksınız? Bunu yapmanın birçok yolu var, örneğin siteden sorumlu bir kişiye email gitmesini sağlayabilirsiniz veya bir veritabanı tablosuna kayıt ekleyebilirsiniz. Fakat tüm bunlardan önce zaten bu işler için yaratılmış olan ve kullanılan bir kısım var "Event Log"; buraya yazmaya ne dersiniz? Hadi hemen koda bakalım:

Global.asax Dosyası:

Sub Application_Error(ByVal Sender As Object, ByVal e As EventArgs)
'Hata Hakkında Bilgi Alınıyor
Dim PageUrl As String = Request.Path
Dim ErrorInfo As Exception = Server.GetLastError()
Dim m As String
m = "Şu sayfaya erişirken hata oluştu: " & PageUrl
m = m & " hata kodu: " & ErrorInfo.InnerException.Message.ToString()

'Yeni bir EventLog yaratılıyor ASP_NET_LOG adında varsa referans veriliypr
Dim ev As New EventLog("ASP_NET_LOG")

'hatayı event log'a yazıyoruz
ev.Log = "ASP_NET_LOG"
ev.Source = "ASP_NET"
ev.WriteEntry(m, EventLogEntryType.Error, 5000)

'Kullanıcıyı düzgün bir hata mesajı verdiğimiz sayfaya yönlendiriyoruz
Response.Redirect("CustomError.aspx")
End Sub


Metin Dosyalarına Bilgi Yazmak

Peki ya örneğin bir kullanıcı çıkış yaptığında bunu sizin de görebileceğiniz bir metin dosyası içerisine yazmak isterseniz? Artık cevap tanıdık geliyor, bu işlemi de global.asax'de yapmalıyız. Nasıl mı? İşte global.asax kodu:

Global.asax Dosyası:

Sub Session_End(ByVal Sender As Object, ByVal e As EventArgs)
Dim fs As New FileStream("c:\kullanici_cikislari.txt", FileMode.Append, FileAccess.Write)
Dim LogStream As New StreamWriter(fs)
Dim s As String
Dim UserID As String
UserID = Session("UserID").ToString()
s = "Kullanıcı: " & UserID
s = s & " çıkış yaptığı tarih " & DateTime.Now
LogStream.WriteLine(s)
LogStream.WriteLine("")
LogStream.Close()
fs.Close()
End Sub


Session_End yani kullanıcı oturumu kapattığı anda çalışacak olan kod sayesinde sabit disk üzerinde kullanici_cikislari.txt adında bir dosya yaratılır, varsa içerisine bilgi eklenecek şekilde açılır ve kullanıcı adı çıkış zamanı ile birlikte s string'i olarak eklenir. Açtığımız dosyayı da son satırda kapatmayı asla unutmuyoruz, yoksa bir diğer kullanıcı için hata verecektir.

Özetle:

Özet olarak global.asax dosyasında birçok olayı kontrol etmek ve sunucu taraflı kodlar yazmak mümkün. Bu kodlar bana uygulama dağıtımı açısından avantajlar sağladığı gibi aynı zamanda kolay yönetilebilen bir uygulama mimarisi sağlamaktadır. Farklı güvenlik önlemleri ve performans artışlarını global.asax dosyası ile uygulamak çok kolay yapılabilmektedir.
Alıntı ile Cevapla
Cevapla
Arama Etiketleri: , , ,



Seçenekler


Benzer Konular
Konu Konu Açanlar Forum Cevaplar Güncel Mesajlar
GmIRC.Net Global mIRC tb2nch Domain Satışı Ve Takası 0 07-06-2008 09:55
Global Power B737 Oyun 0 05-03-2008 03:33
Etkin TBM nedir ? kadınca Google Adsense 0 24-02-2008 01:30
Visual Basic’te Wav Dosyasının Çaldırılması! Celebrian Visual Basic & Action script 0 24-12-2007 11:34
Boot.ini Dosyasının Yedek Kopyasını Kaydetme kadınca İşletim Sistemleri 0 23-11-2007 08:17


Webmaster web tasarım online reviews ~ Kadınlar blogu ~ Apple iPhone, iPod Touch ( iTouch ) Forum ~ iPhone