ID Artikel: 306355 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0

Cara membuat pelaporan kesalahan kustom halaman di ASP.NET dengan menggunakan Visual C#.NET

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini menjelaskan cara menggunakan Visual C#.NET kode untuk perangkap dan menanggapi kesalahan ketika mereka terjadi di ASP.NET. ASP.NET telah meningkatkan Kesalahan penanganan pilihan dari tradisional Microsoft Active Server Pages (ASP). Dalam ASP.NET, Anda dapat menangani kesalahan pada beberapa tingkat yang berbeda dalam Anda aplikasi.

Fitur baru di ASP.NET

ASP.NET menawarkan beberapa kemajuan dalam cara Anda dapat menangani dan menanggapi kesalahan. Tradisional ASP, Anda menangani kesalahan dengan "On Error Resume Next" (atau mencoba menangkap blok di JScript). Secara bergantian, jika Anda menjalankan Microsoft Internet Information Services (IIS) 5.0, Anda menggunakan ASPError objek untuk membuat pelaporan halaman kesalahan kustom. Namun, ini pendekatan memiliki keterbatasan mereka.

ASP.NET menyediakan beberapa tingkatan pada yang Anda dapat menangani dan menanggapi kesalahan yang mungkin terjadi ketika Anda menjalankan ASP.NET aplikasi. ASP.NET menyediakan tiga metode utama yang memungkinkan Anda untuk menjebak dan menanggapi kesalahan ketika mereka terjadi: Page_Error, Application_Error, dan file konfigurasi aplikasi (Web.config).

Artikel ini menunjukkan cara menggunakan fitur baru ini di ASP Anda.NET aplikasi. Meskipun artikel ini menjelaskan bagaimana memberikan halaman kesalahan kustom dan pelaporan kesalahan umum yang berhubungan langsung dengan ASP.NET, artikel ini tidak menggambarkan penanganan pendekatan seperti kesalahan lainnya coba-menangkap-akhirnya blok dan pengecualian Common Language Runtime (CLR) sistem.

Cara menggunakan metode Page_Error

The Page_Error event handler menyediakan cara untuk perangkap kesalahan yang terjadi pada Halaman tingkat. Anda hanya dapat menampilkan kesalahan informasi (sebagai contoh kode untuk Ikuti Apakah), atau Anda dapat log peristiwa atau melakukan beberapa tindakan.

Catatan Contoh ini menampilkan informasi kesalahan rinci dalam browser hanya untuk keperluan demonstrasi. Anda akan ingin untuk berhati-hati ketika menampilkan rinci informasi kepada pengguna akhir aplikasi, terutama ketika aplikasi berjalan di Internet. Tindakan yang lebih tepat akan menampilkan pesan kepada pengguna yang memberitahu mereka bahwa sebuah kesalahan telah terjadi, dan kemudian benar-benar log kesalahan tertentu rincian dalam acara log.

Contoh ini throws Pengecualian null, yang memaksa kesalahan terjadi di Page_Load event handler. Ikuti langkah-langkah ini untuk membuat awal halaman yang akan menunjukkan menggunakan Page_Error event handler.
  1. Ikuti langkah-langkah ini untuk menambah sebuah berkas baru yang bernama PageEvent.aspx untuk proyek Anda:
    1. Buka Microsoft Visual Studio.NET.
    2. Dalam solusi Explorer, klik kanan node proyek, Arahkan ke Tambahkan, lalu klik Tambahkan formulir Web.
    3. Dalam Nama kotak teks, ketik PageEvent.aspx, dan kemudian Klik Terbuka.
  2. Tambahkan kode berikut untuk PageEvent.aspx:
    <script language=C# runat="server">
    void Page_Load(object sender, System.EventArgs e)
    {
    	throw(new ArgumentNullException());
    }
    
    public void Page_Error(object sender,EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"<b>Error Caught in Page_Error event</b><hr><br>" + 
    			"<br><b>Error in: </b>" + Request.Url.ToString() +
    			"<br><b>Error Message: </b>" + objErr.Message.ToString()+
    			"<br><b>Stack Trace:</b><br>" + 
    	                  objErr.StackTrace.ToString();
    	Response.Write(err.ToString());
    	Server.ClearError();
    }
    </script> 
    					

    Catatan Sampel kode ini, AutoEventWireup atribut tidak secara eksplisit menetapkan. Jika Anda tidak secara eksplisit menetapkan nilai untuk AutoEventWireup atribut, nilai default benar digunakan. Jika Anda menggunakan Visual Studio.NET untuk mengembangkan Anda aplikasi, kode formulir Web template secara eksplisit menetapkan AutoEventWireup nilai atribut untuk palsu. Ada perbedaan penting antara default nilai yang ASP.NET menggunakan, dan default nilai yang Visual Studio.Kode bersih template menetapkan atribut ini. Jika AutoEventWireup nilai atribut diatur ke palsu, event handler yang dinyatakan dalam.Halaman ASPX tidak api. Hal ini dapat membingungkan jika Anda tidak tahu tentang ini fungsionalitas.
  3. Dari Berkas menu, klik Simpan PageEvent.aspx.
  4. Klik kanan halaman, dan kemudian klik Lihat dalam Browser untuk menjalankan halaman. Perhatikan bahwa kesalahan dilemparkan dan melaporkan Menurut spesifikasi kode.
Catatan Anda mungkin menyadari bahwa kode masalah panggilan untuk Server.ClearError. Hal ini mencegah kesalahan dari terus Application_Error event handler.

Selain itu, Anda juga harus mengambil catatan dari Mewarisi atribut di @ Page petunjuk. Jika Mewarisi ditetapkan, Anda harus membangun proyek sebelum Anda menelusuri halaman. Jika Anda tidak membangun proyek pertama, Anda akan menerima pesan galat berikut ini:
'Project.PageEvent' adalah tidak sah

Cara menggunakan metode Application_Error

Mirip Page_Error event handler, Anda dapat menggunakan Application_Error event handler untuk perangkap kesalahan yang terjadi dalam aplikasi Anda. Karena untuk acara aplikasi-lebar lingkup, Anda dapat log kesalahan aplikasi informasi atau menangani kesalahan level aplikasi lain yang mungkin terjadi.

Contoh untuk diikuti didasarkan pada sebelumnya Page_Error kode sampel dan akan dipecat jika kesalahan dalam Page_Load tidak terjebak dalam Page_Error event handler. The Application_Error event handler yang ditentukan di Global.asax file Anda aplikasi. Untuk kemudahan, langkah-langkah di bagian ini membuat sebuah halaman baru di untuk membuang pengecualian, perangkap kesalahan dalam Application_Error event handler Global.asax file, dan menulis untuk kesalahan log peristiwa. Langkah-langkah berikut menunjukkan cara menggunakan Application_Error metode:
  1. Menambah sebuah berkas baru yang bernama AppEvent.aspx untuk Anda proyek.
  2. Tambahkan kode berikut untuk AppEvent.aspx:
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    Catatan Informasi yang dibahas dalam "Page_Error"bagian tentang AutoEventWireup atribut juga berlaku untuk contoh kode dalam langkah ini. Lihat informasi dalam "Page_Error"bagian untuk lebih jelasnya.
  3. Dari Berkas menu, klik Simpan AppEvent.aspx.
  4. Tambahkan Application_Error event handler untuk berkas Global.asax untuk menjebak kesalahan yang Anda melempar Page_Load event handler halaman AppEvent.aspx. Pemberitahuan bahwa Anda harus menambahkan lain menggunakan pernyataan untuk System.Diagnostics namespace untuk Global.asax menggunakan log peristiwa.

    Tambahkan kode berikut ke berkas Global.asax:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString()+ 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	Server.ClearError();
    	//additional actions...
    } 
    					
  5. Simpan Global.asax file.
  6. Dalam Visual Studio.NET, di Bangun menu, klik Bangun.
  7. Klik kanan halaman, dan kemudian klik Lihat dalam Browser. Dalam kasus ini halaman akan kosong, namun, Anda harus melihat bahwa entri baru telah ditambahkan dalam acara log. Contoh ini membuat entri di log aplikasi, yang dapat diakses dari Peraga Peristiwa. Setelah log in kesalahan yang Anda mungkin ingin untuk mengarahkan ulang pengguna lain yang lebih user-friendly kesalahan halaman, atau melakukan tindakan beberapa tambahan jika diperlukan.

Cara menggunakan Web.config file

Jika Anda tidak menelepon Server.ClearError atau kesalahan dalam perangkap Page_Error atau Application_Error event handler, kesalahan ditangani berdasarkan pengaturan <customerrors>bagian dari Web.config file. Dalam <customerrors>bagian, Anda dapat menentukan halaman redirect standar Halaman kesalahan (</customerrors> </customerrors>defaultRedirect) atau menentukan untuk halaman tertentu berdasarkan kode error HTTP yang dibesarkan. Anda dapat menggunakan metode ini untuk menyesuaikan kesalahan pesan yang pengguna menerima.

Jika terjadi kesalahan yang tidak terjebak pada setiap tingkat sebelumnya dalam aplikasi Anda, halaman kustom ini ditampilkan. Ini bagian menunjukkan bagaimana memodifikasi Global.asax file sehingga Server.ClearError tidak pernah menelepon. Sebagai hasilnya, kesalahan penanganan di File web.config sebagai titik terakhir untuk menjebak kesalahan.
  1. Buka Global.asax file dari sebelumnya contoh.
  2. Komentar Server.ClearError baris untuk memastikan bahwa kesalahan permukaan dalam Web.config file.
  3. Simpan perubahan Anda ke Global.asax. Kode Anda harus sekarang tampak mirip dengan berikut ini:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString() + 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	//Server.ClearError();
    	//additional actions...
    } 
    					
  4. Tambahkan kode berikut ke bagian <customerrors> untuk mengarahkan ulang pengguna ke halaman kustom:<b00> </b00> </customerrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Catatan Anda harus mengubah path file dalam defaultRedirect atribut sehingga referensi yang relevan Web server dan nama aplikasi.
  5. Karena kesalahan yang terperangkap pada tingkat ini dikirim untuk halaman kesalahan default, Anda harus membuat sebuah halaman kesalahan yang bernama ErrorStatus.htm. Perlu diingat bahwa Anda menggunakan metode ini untuk mengontrol apa yang disajikan kepada pengguna, jadi contoh ini menggunakan .htm halaman untuk halaman kesalahan. Tambahkan berikut kode untuk ErrorStatus.htm:
    <HTML>
    <HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
         <b>Custom Error page!</b>
         <br>
         You have been redirected here from the <customErrors> section of the 
         Web.config file.
    </BODY>
    </HTML>
    					
  6. Untuk menguji kode, menyimpan file, membangun proyek, dan kemudian melihat AppEvent.aspx di browser. Perhatikan bahwa ketika kesalahan dilemparkan, Anda akan diarahkan ke halaman ErrorStatus.htm.
Meskipun Anda dapat referensi halaman kesalahan default nilai The defaultRedirect atribut di bagian <customerrors>, Anda juga dapat Tentukan halaman tertentu untuk mengarahkan berdasarkan kode kesalahan HTTP yang dibesarkan. Elemen anak <error>memungkinkan untuk pilihan ini. Sebagai contoh:<b00> </b00> </error> </customerrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Catatan Halaman yang ditetapkan dalam defaultRedirect <customerrors>adalah bagian berkas .htm. I</customerrors>

Perhatikan bahwa <customerrors>bagian mencakup<b00> </b00> </customerrors>modus atribut yang diatur ke Pada. The modus atribut yang digunakan untuk mengontrol bagaimana pengalihan kesalahan terjadi. Sebagai contoh, jika Anda sedang mengembangkan aplikasi, kemungkinan besar Anda ingin melihat ASP sebenarnya.NET pesan kesalahan dan tidak ingin diarahkan untuk lebih Halaman kesalahan user-friendly. The modus atribut termasuk pengaturan berikut:
  • Pada: Unhandled pengecualian mengarahkan ulang pengguna ke yang ditentukan defaultRedirect Halaman. Mode ini digunakan terutama dalam produksi.
  • Dari: Pengguna menerima informasi pengecualian dan tidak Dialihkan untuk defaultRedirect Halaman. Mode ini digunakan terutama dalam pengembangan.
  • RemoteOnly: Hanya pengguna yang mengakses situs pada komputer lokal (dengan menggunakan localhost) menerima informasi pengecualian. Semua pengguna diarahkan ke The defaultRedirect Halaman. Mode ini digunakan terutama untuk debugging.

Pemecahan Masalah

Dalam instalasi standar pada Microsoft Windows 2000 dan di Microsoft Windows XP, ASP.NET menjalankan kode aplikasi Web dalam proses pekerja. Identitas proses ini default ke unprivileged account lokal disebut ASPNET account. Dalam rilis beta dari ASP.NET, identitas proses itu Sistem, account administratif yang kuat dengan banyak hak istimewa pada mesin.

Dalam instalasi standar pada Windows Server 2003 (IIS 6), ASP.NET menjalankan kode aplikasi Web dalam proses pekerja. Identitas proses ini default ke rekening terbatas disebut NetworkService.

Untuk lebih informasi tentang perubahan ini dan bagaimana hal itu dapat mempengaruhi menjalankan kode ini Artikel, dan kode lainnya yang lain yang mungkin perlu tambahan akses, kunjungi situs-situs Web berikut:
Versi 1 Perubahan keamanan Microsoft.NET Framework
http://msdn2.Microsoft.com/en-us/library/ms994923.aspx (http://msdn2.microsoft.com/en-us/library/ms994923.aspx)

REFERENSI

Untuk informasi lebih lanjut, kunjungi Website Microsoft berikut situs:
Exception manajemen di.NET
http://msdn2.Microsoft.com/en-us/library/ms954599.aspx (http://msdn2.microsoft.com/en-us/library/ms954599.aspx) HttpServerUtility.ClearError metode
.aspx http://msdn2.Microsoft.com/en-us/library/System.web.httpserverutility.clearerror (vs.71) (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebHttpServerUtilityClassClearErrorTopic.asp) MSDN.Pusat pengembangan NET
http://msdn2.Microsoft.com/en-US/netframework/default.aspx (http://msdn2.microsoft.com/en-us/netframework/default.aspx) Microsoft.NET Beranda
http://www.Microsoft.com/net/ (http://www.microsoft.com/net/)

Berlaku bagi:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Kata kunci: 
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:306355  (http://support.microsoft.com/kb/306355/en-us/ )