Ada tiga aspek penanganan pengecualian di ASP.NET:
Tracing - Menelusuri eksekusi program pada level halaman atau level aplikasi.
Penanganan kesalahan - Menangani kesalahan standar atau khusus di tingkat halaman atau aplikasi.
Debugging - Maju melalui program dan atur breakpoint untuk menganalisis kode.
Pada bab ini kita akan membahas tracing dan penanganannya. Dan dalam bab ini, kita akan membahas debugging.
Untuk memahami konsepnya, buatlah contoh aplikasi berikut. Ini memiliki kontrol label, daftar dropdown dan link. Daftar dropdown memuat serangkaian kutipan dan kutipan yang dipilih akan ditampilkan pada label di bawah. Ia juga memiliki hyperlink yang menunjuk ke link yang tidak ada.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Pelacakan, debugging dan penanganan kesalahan </title> </head> <body> <form id= "form1" runat="server"> <div> <asp:Label ID="lblheading" runat="server" Text="Pelacakan, Debuggin, dan Penanganan Kesalahan"> </asp:Label> <br /> <br / > <asp:DropDownList ID="ddlquotes" runat="server" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged"> </asp:DropDownList> <br /> <br /> <asp:Label ID="lblquotes" runat= "server"> </asp:Label> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="mylink.htm">Tautan ke:</asp:HyperLink> </div> </form> </body></html>
Kode demi file:
kelas parsial publik _Default : System.Web.UI.Page{ protected void Page_Load(pengirim objek, EventArgs e) { if (!IsPostBack) { string[,] quotes = { {"Imajinasi lebih penting daripada Pengetahuan.", "Albert Einsten"}, {"Asumsikan suatu kebajikan, jika Anda tidak memilikinya" "Shakespeare"}, {"Seorang pria tidak dapat merasa nyaman tanpa persetujuannya sendiri", "Mark Twain"}, {"Waspadalah terhadap dokter muda dan tukang cukur tua", "Benjamin Franklin"}, {"Apa pun yang dimulai dengan kemarahan akan berakhir dengan rasa malu", "Benjamin Franklin"} }; for (int i=0; i<quotes.GetLength(0 ); i++) ddlquotes.Items.Add(new ListItem(quotes[i,0], quotes[i,1])); ddlquotes_SelectedIndexChanged(pengirim objek, EventArgs e) { if (ddlquotes.SelectedIndex != -1) { lblquotes.Text = String.Format("{0}, Kutipan: {1}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue) ;
Untuk mengizinkan penelusuran tingkat halaman, Anda perlu mengubah direktif Halaman dan menambahkan atribut Trace sebagai berikut:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" %>
Sekarang ketika Anda menjalankan file tersebut, Anda akan mendapatkan informasi jejak:
Ini memberikan informasi berikut di header:
ID Sesi
Kode Status
Waktu Permintaan
Jenis Permintaan
Pengkodean Permintaan dan Respons
Setiap kali halaman diminta, kode status yang dikirim dari server menampilkan nama dan waktu kesalahan, jika ada. Tabel berikut menunjukkan kode status HTTP umum:
nomor | menggambarkan |
---|---|
Pemberitahuan (100 - 199) | |
100 | melanjutkan |
101 | perjanjian konversi |
Sukses (200 - 299) | |
200 | OKE |
204 | Tidak ada konten |
Pengalihan (300 - 399) | |
301 | berpindah secara permanen |
305 | Gunakan proksi |
307 | pengalihan sementara |
Kesalahan dari klien (400 - 499) | |
400 | Permintaan buruk |
402 | Persyaratan pembayaran |
404 | tidak ditemukan |
408 | Minta batas waktu |
417 | Berharap untuk gagal |
Kesalahan dari server (500 - 599) | |
500 | Kesalahan Server Internal |
503 | Layanan tidak tersedia |
505 | Versi HTTP tidak didukung |
Di bawah informasi tingkat atas, terdapat log Jejak, yang memberikan rincian siklus hidup halaman. Ini memberikan waktu yang berlalu dalam hitungan detik sejak halaman diinisialisasi.
Bagian selanjutnya adalah pohon kontrol, yang mencantumkan semua kontrol pada halaman dalam format hierarki:
Deklarasi terakhir dalam Sesi dan Aplikasi adalah ringkasan, kumpulan cookie dan header diikuti oleh semua variabel server.
Objek jejak memungkinkan Anda menambahkan informasi khusus untuk melacak keluaran. Ada dua metode untuk diselesaikan: metode Tulis dan metode Peringatkan.
Ubah event handler Page_Load untuk mendeteksi metode Write:
protected void Page_Load(pengirim objek, EventArgs e){ Trace.Write("Pemuatan Halaman"); if (!IsPostBack) { Trace.Write("Tidak Diposting Kembali, Pemuatan Halaman"); ............. }}
Jalankan untuk melihat dampaknya:
Untuk mendeteksi metode Peringatkan, mari kita paksa beberapa kode kesalahan ke dalam indeks yang dipilih yang mengubah pengendali peristiwa:
coba{ int a = 0; int b = 9 / a;}tangkap (Pengecualian e){ Trace.Warn("UserAction", "memproses 9/a", e);}
Try-Catch adalah konstruksi pemrograman C#. Blok try menyimpan kode apa pun yang mungkin atau mungkin tidak menghasilkan kesalahan, dan blok catch menangkap kesalahan tersebut. Saat program dijalankan, ia mengirimkan peringatan di log jejak.
Pelacakan tingkat aplikasi berlaku untuk semua halaman di situs web. Hal ini diimplementasikan dengan menempatkan kode berikut di file web.config:
<sistem.web> <jejak diaktifkan="benar" /></system.web>
Meskipun ASP.NET mendeteksi semua kesalahan run-time, masih ada beberapa kesalahan kecil yang masih ada. Mengamati kesalahan melalui penelusuran adalah untuk pengembang, bukan pengguna.
Oleh karena itu, untuk mencegah hal ini terjadi, Anda dapat menambahkan pengaturan resolusi kesalahan di web.config aplikasi Anda. Ini adalah resolusi kesalahan seluruh aplikasi. Misalnya, Anda dapat menambahkan kode berikut ke file web.config:
<konfigurasi> <sistem.web> <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound .htm" /> </customErrors> </system.web><konfigurasi>
Beberapa atribut yang mungkin: - **Mode:** Memungkinkan atau melarang halaman kesalahan khusus. Ini memiliki tiga kemungkinan nilai: - **On:** Menampilkan halaman kustom. - **Off:** Menampilkan halaman kesalahan ASP.NET (halaman kuning) - **remoteOnly:** Menampilkan kesalahan khusus pada klien, menampilkan kesalahan ASP.NET lokal. - **defaultRedirect:** Berisi URL halaman yang akan ditampilkan jika terjadi kesalahan yang belum terselesaikan. Untuk menempatkan halaman kesalahan khusus yang berbeda untuk jenis kesalahan yang berbeda, subtag digunakan, di mana halaman kesalahan yang berbeda ditentukan berdasarkan kode status kesalahan. Untuk mencapai resolusi kesalahan tingkat halaman, direktif Halaman dapat dimodifikasi menjadi: `````` Karena Debugging ASP.NET merupakan topik penting di dalamnya, kita akan membahasnya secara terpisah di bab berikutnya.