Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Serkan Karaarslan
Serkan Karaarslan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
4 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: burada edilen ekrana finally hata.aspx hatalari hatayi herhangi istisna kaynak meydana sayfamizi sayfasina veritabani web.config ASP.NET Serkan Karaarslan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : ASP.NET
Yayınlanma Tarihi : 29.10.2004
Okunma Sayısı : 36461
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 29.3.2024
Turhal Temizer
Mac OS/X Removing CUDA 29.3.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 29.3.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 29.3.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET'te Hata Ayıklama
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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.
TextBox’a SQL Server’da 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 ID’sini 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(); //TextBox’a 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. TextBox’a 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
  • Yazılan Yorumlar
  • Yorum Yaz
KAS
1
2004
Sayfalar arası bilgi taşımanın çeşitli yolları vardır. QueryString veya Session kullanarak bu yapılabilir. Bu tamamiyle uygulamanın nasıl işleyeceğine göre yapılan bir tercih meselesidir. Bence verim olarak, iki tercih arasında çok fazla bir fark olacağını düşünmüyorum. Her ikisininde uygulamaya göre bazı artı ve eksileri vardır. Örneğin; QueryString kullanarak web uygulaması için çok önemli bilgileri(kullanıcıların görmemesi gereken )açık bir şekilde gönderilmesi güvenlik açıklarına sebep olur. QueryString ile gönderilecek bu bilgiyi mutlaka crypto kullanarak gönderilmesi gerekir. Sadece bu makaledeki örneği düşünürsek; her iki yolla da olabilir. Ama verim açısından , buradaki kullanım amacına göre , her iki yol düşünüldüğünde bir fark oluşturmaz kanaatindeyim.
EKİ
31
2004
Belki konuyla ilgili değil ama; sadece fikir alışverişi olsun istedim: Session["hata"] = ex.ToString(); Response.Redirect("hata.aspx"); yerine, Response.Redirect("hata.aspx?hata="+ex.ToString()); desek, daha verimli olmaz mı?
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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