前言:異常的處理在項目開發中是很有必要的,異常的處理不僅僅只是try..catch..finally就完事了的。異常處理絕對可以稱開發中的重要組成部分。必須正確的面對異常,因為即使是最能干的開發人員,也要面對這個問題 ....
我們不知道客戶是怎麼樣使用我們開發的軟件的,所以我們必須處理這樣的情況:如果系統不按照我們的設計時所想的運行,我們改怎麼辦?
下面我們就來具體的介紹在ASP.NET項目開發中的異常的處理方式,希望看完後,大家可以回答上面的問題。
本篇的話題如下:
應用程序級別異常處理的錯誤處理
頁面級別異常處理
方法級別異常處理
web.config文件異常處理配置
健康監視(Health Monitoring)
Enterprise Application Blocks異常處理模塊
一.在應用程序級別的異常處理:
相信大家對Application對象不陌生,而且在項目中添加過Global.asax文件。確實,ASP.NET在應用程序級別處理異常的代碼都是放在Global.asax的Application_Error事件處理下的:
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}
我們可以在上面的事件處理的方法中捕獲所有的異常,而且還可以把異常記錄到日志文件,並且同時發送Email告訴開發人員出現了什麼問題,如下
Exception error = Server.GetLastError().GetBaseException();
//在事件日志中記錄異常
if (!EventLog.SourceExists("ApplicationException"))
{
EventLog.CreateEventSource("ApplicationException", "Application");
}
EventLog eventLog = new EventLog();
eventLog.Log = "Application";
eventLog.Source = "ApplicationException";
eventLog.WriteEntry(error.ToString(), EventLogEntryType.Error);
//發送Email給開發人員
MailMessage email = new MailMessage("[email protected]",
"[email protected]");
email.Body = error.ToString();
email.Subject = "An error occurred in the Application";
SmtpClient smtpClient = new SmtpClient("127.0.0.1", 25);
smtpClient.Send(email);
Response.Redirect("ErrorPage.aspx");
當然,上面的代碼要正確的運行,我們海必須在Global.asax中加入相應的命名空間,而且在發送郵件的時候,上面的"127.0.0.1"要換為我們自己的郵件服務器的地址:
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.Net.Mail" %>
還有一點要注意的就是,ASP.NET運行時是以ASPNET賬戶運行的,這個賬戶的權限是有限的,如果我們想要使得上面的代碼可以運行,那麼就必須要給ASPNET賬戶訪問注冊表的權限。如果你不給權限,那麼上面的代碼就報錯。
我們賦予ASPNET賬戶訪問在"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog"節點以及字節點的權限。