2008年5月17日 星期六

ASP.NET 3.5 網站統一錯誤處理通知

開發網站時,最怕使用者抱怨,怎麼出現一個好奇怪的畫面, 而這個畫面就是程式執行錯誤的頁面,因此統一錯誤管理變成是開發網站一定要規劃設計的一個功能,如果要在統一錯誤處理頁面再去使用MAIL將訊息傳送給管理員,就可以搭配.NET的傳送MAIL機制,以下亞當斯寫一個可以管理網站整體錯誤的實用範例,步驟如下:

1.在Global.asax的Application_Error事件中,使用Server.Transfer將網頁導到統一處理錯誤的頁面GenericErrorPage.aspx:

void Application_Error(object sender, EventArgs e) 
{
Server.Transfer("~/GenericErrorPage.aspx");
}

2.在GenericErrorPage.aspx的Page_Load事件中,先判斷Server.GetLastError()不為null代表有錯誤要處理。

//如果有錯誤需要處理的話
if (Server.GetLastError() != null)
{
//……
}

3.使用MAIL來通知管理者錯誤訊息,首先匯入System.Net.Mail命名空間


<%@ Import Namespace="System.Net.Mail" %>


4.建立MailMessage物件

//使用asp.net 傳送MAIL
MailMessage mm = new MailMessage("admin@asp.net",
"adams@uuu.com.tw",
"網站錯誤訊息",
Server.GetLastError().GetBaseException().Message);

5.接著先使用Server.ClearError();將錯誤清除 6.最後再用SmtpClient物件來傳送紀錄錯誤的訊息給管理員。

try
{
//針對已經的錯誤(如:Send Mail)做處理
SmtpClient sc = new SmtpClient("localhost");
sc.Send(mm);
}
catch (Exception ex)
{
Response.Write(ex.Message );
}

7 則留言:

Alvin 提到...

Adams您好,

在您的大作"ASP.net3.5"一書中,我執行第9-7的練習,但卻出現錯誤 "找不到型別或命名空間名稱'var'", 不曉得是什麼原因呢?

抱歉因不知您的email,故只好上您的blog發問;謝謝囉!

亞當斯(Adams) 提到...

var 是C# 3.0用的語法唷~請確定您的網站是用VS2008開的,以及web.config中的framework是RUN 3.5的! ^^

Alvin 提到...

感謝回覆!

我使用的是Visual Studio 2008,環境Vista+.NetFramework3.5.

程式的話是直接抓您書中第九章的練習題解答"Practice9-7".執行時就會出現此錯誤.

煩請解惑,感恩!

亞當斯(Adams) 提到...

這應該是web.config中的設定檔是跑2.0的,請打開web.config確認網站中以下這段system.codedom設定:
compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"

以及providerOption name="CompilerVersion" value="v3.5"

這應該是網站用.net 2.0去跑的原因!!

Alvin 提到...

老師您好,我的設定都與你說的相同,但問題仍在。我有把畫面抓下來,再麻煩您幫忙check!

http://cid-792228a4ca069120.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/error.jpg

謝謝!

亞當斯(Adams) 提到...

這就怪了,因為在我的電腦上執行是OK的,這樣好了,請妳新增一個新網站,把這隻程式COPY過去執行看看,應該沒問題才對,不然的話,請在妳的新網站隨便寫一行程式,例如:var name = "ASP.NET"; 看看執行結果如何,基本上如果你的網站是跑3.5 一定是沒問題才對!!

Alvin 提到...

近日連日測試,找到一些蛛絲馬跡:

若直接新增一個專案或網站(預設為.Net Framework 3.5),然後在default.aspx內貼上書中範例、或”加入現有項目”選該範例,則都可正確執行。

但是,若直接新增網站並選”空白網站”,則無論是新增default.aspx再貼上、或者用”加入現有項目”加入範例,則都會出現該錯誤。

所以我想,是否”空白網站”時,會使用到我電腦中其他”.Net Framework”版本的關係?