|
ASP.NET'te Hata Ayıklama |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bir web uygulaması
veya herhangi bir uygulama yaparken, ana programlamadan çok, programın çalışması
sırasında meydana gelebilecek hataları önlemekle uğraşırsınız. Hatalar sözdizimi
hataları, parametre/giriş hataları mantık hataları ve kaynak hataları gibi sıralanabilir.
Herhangi bir sayfada
meydana gelen hatada, ASP.NET motoru sayfadaki kodun çalışmasını durdurur. Kullanıcılar
açısından bu oldukça sevimsiz bir durumdur. İlginç hata tanımlamalarıyla karşı
karşıya kalabilirler.Bu da web uygulamanızın itibarı açısından eksi puandır.
İşte bu aşamada kullanıcılara gerekli hata bilgileri verilmelidir. Aslında bu
kullanıcılarla birlikte uygulamayı geliştirenler içinde hataları gidermede önemli
bir ipucudur.
Kullanıcının veri girişinde yaptığı hataları, validator web form elemanlarıyla
veya sunucu taraflı kodlamayla önlenebilir. Bunun dışında programda veya sunucuda
meydana gelebilecek (dosya adının değişmesi, dosyanın taşınması vb) hataları
kullanıcıya bildirip ne yapması konusunda yardımcı olunmalıdır.
.NET çatısında
hatalar istisna fırlatırlar.Bunun için Exception
sınıfından türetilen sınıfları kullanırlar. Temel hata yakalama ve yönetme yapısı
try-catch-finally bloğudur.
Ayrıca web.config
dosyamızın customErrors tagında yapacağımız değişklikle HTTP hata kodlarına
göre,istediğimiz şekilde özel hata sayfalarımızı tasarlayabiliriz.
Konumuzu bir örnek
üzerinde açıklayalım.
TextBoxa SQL Serverda yer alan bir veritabanı adı girelim ve bu veritabanına
bağlanmaya çalışalım. Eğer girilen veritabanı mevcut değil ise bu hatayı yakalayıp
hata sayfamızda görüntüleyelim.
Öncelikle deneme.aspx
sayfamızı oluşturalım. Aşağıdaki şekle benzer bir form hazırlayın.
TextBox web form
kontrolünün IDsini txtdatabase yapın.
Daha sonra
bağlan butonunun OnClick olayına aşağıdaki kodu yazalım.
private
void
Button1_Click(object sender, System.EventArgs
e)
{
SqlConnection conn = new SqlConnection("data
source=localhost; database="+txtdatabase.Text+"; Trusted_Connection=true;");
try //asıl
yapılmasını istediğimiz işlemlerin yazıldığı bloktur.Bu blok içinde yazılan
kodlar çalıştırılır.
{
conn.Open(); //TextBoxa girilen veritabanını açmaya
çalışıyoruz.
Response.Write(txtdatabase.Text + " veritabanına başarıyla bağlanıldı");
// eğer veritabanı açılırsa ekranda işlemin düzgün
yapıldığına dair mesaj yazacaktır.
}
catch (Exception ex)
//catch bloğu ise try bloğundaki herhangi bir isteğin düzgün gerçekleştirilememesi
durumunda hatayı yakalıyor.
{
Session["hata"] = ex.ToString(); //hata.aspx
sayfasında hatanın tanımını yazmak için Session değişkeni kullandık.
Response.Redirect("hata.aspx"); //hata oluştuğunda hata.aspx
sayfasına gider.
}
finally //İster
try bloğu çalışsın ister catch bloğu çalışsın sonunda mutlaka finally
bloğundaki istekler gerçekleşir.
{
conn.Close(); //bağlantımız kapatılıyor.
}
}
|
catch bloğu çalışıp
hata yakalandığı zaman bu hatayı gösterebileceğimiz hata.aspx
sayfamızı yazalım.
private
void
Page_Load(object sender, System.EventArgs e)
{
Response.Write("<font color=red>Veritabanına bağlanırken bir
hata oluştu</font><br>"); //hata
mesajı
Response.Write("<b>Hata Tanımı</b>" + Session["hata"]);
//bir önceki sayfadan gelen hatayı Session değişkeni
yardımıyla ekrana yazdırıyoruz.
}
|
Sadece bu haliyle
uygulamamızı çalıştıralım. TextBoxa Northwind yazın
ve bağlan butonuna tıklayın.
Ekranda şöyle bir çıktı görmelisiniz.
Burada try bloğu ve finally bloğu çalışmıştır. Try bloğunda yer alan tüm istemler
başarıyla gerçekleştiği için catch bloğu çalışmamış ve herhangi bir istisna
yakalanmamıştır.
Şimdi deneme.aspx sayfasına geri dönüp sisteminizde
yer almayan bir veritabanı ismi girin.
Bu sefer ekranda şuna benzer bir çıktı görürsünüz.
Bu sefer burada yine try bloğu çalıştırılmış ama yazdığınız veritabanı bulunamadığından,
catch bloğu devreye girip bir istisna yakalamıştır. (SQL server service managerı
durdurup tekrar deneyin bu sefer başka bir hata yakalar)
Ve herzamanki gibi finally bloğu devreye girmiştir. Ben burada otomobil adlı
bir veritabanına bağlanmaya çalıştım, sistemimde böyle bir veritabanı olmadığından
işlem başarısız oldu. Eğer try-catch-finally bloklarını kullanmasaydık, karşımıza
conn.Open(); satırında hata olduğunu gösteren bir sayfa ekrana gelecektir. (NOT:Açılmamış
veritabanını kapatmak .NET uygulamalarında herhangi bir hataya sebep olmaz.)
Örneğin burada catch bloğu çalışırsa, hata.aspx sayfasına yönlendirme yapılıyor.
Peki ya hata.aspx sayfası bulunamazsa ne olacak? Web sayfalarında gezinirken
mutlaka karşılaştığımız bir hata "Not Found" (Sayfa
Bulunamadı). Biz browserımızın hata koduna göre, ekrana getirdiği sayfayı değiştirip
kendi özel hata sayfamızı yazalım.
Bunun için web.config sayfamızın customErrors tagına
eklemeler yapmalıyız. Aşağıdaki şekilde web.config dosyanızı değiştirin.
Burada defaultRedirect eğer özel bir hata kodu
yazılmamışsa, hata meydana geldiğinde default olarak gösterilecek sayfayı bildirir.
error statusCode... ile başlayan satırda da özel hata kodlarına göre, ekrana
gelecek hata sayfası bulunur. Bu örnekte durum kodu 404 olan bir hata meydana
gelirse (sayfa bulunamadı hatası) error404.html sayfasının ekrana gelmesini
istiyoruz.
deneme.aspx sayfamızı tekrar çalıştımadan önce
hata.aspx sayfamızın adını hata1.aspx olarak
değiştirin. TextBox içine yine sisteminizde var olmayan bir veritabanını yazın
ve bağlan butonuna tıklayın. yine aynı şekilde catch bloğu çalışacak ve hata.aspx
sayfasına gidilecek. Fakat hata.aspx sayfamız olmadığından error
404 hatası meydana gelecek ve web.config ayarlarında yazdığımız error.html
sayfamız ekrana gelecektir.
Aşağıda
bazı hata kodları ve bunların açıklamasını bulabilirsiniz.
HTTP
Hata Durum Kodları
|
KOD
|
STANDART
ANLAMLARI
|
AÇIKLAMASI
|
200
|
OK
|
Talep başarılı
idi
|
301
|
Moved Permanently
|
Talep edilen
URL artık erişilebilir değil başka bir konuma taşınmıştır.
|
302
|
Moved Temporarily
|
Talep edilen
URL geçici olarak erişilemez veya başka bir konuma geçici olarak taşınmıştır.
|
304
|
Not Modified
|
Talep edilen
dosya ya da kaynak belirtilen tarihten beri değişmediyse, istemcinin tampon
bellekten güncellenmesine olanak verir.
|
400
|
Bad Request
|
Talep düzgün
olmayan bir şekilde biçimlendirildi
|
401
|
Unauthorized
|
Talep reddedildi,
kullanıcının kimlik denetiminden geçmesi gerekir.
|
403
|
Forbidden
|
Talep edilen
kaynak erişilebilir değildir.
|
404
|
Not Found
|
Talep edilen
kaynak bulunamadı
|
500
|
Internal
Server Error
|
Talebi işlerken
bir hata meydana geldi.
|
502
|
Bad Gateway
|
Sunucu, bir
upstream sunucundan gelen geçerli bir yanıtı okuyamamaktadır.
|
NOT:
Bu makalede yer alan ConnectionString ifadesinin içinde Trusted_Connection =
true ifadesi ile veritabanımıza bağlanıyoruz. Fakat gerçek web uygulamalarında
bu tür ConnectionString ifadesi oluşturmaktan sakının. Burada kodu her makinede
rahatlıkla çalıştırabilmeniz için bu şekilde yaptım.
Örnek Uygulama için tıklayınız :hatayakalama.zip
Makale:
ASP.NET'te Hata Ayıklama ASP.NET Serkan Karaarslan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|