|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我觉得很重要,一般所说的不重要应该指的是:你学好一种以后再学另一种就很容易了。(因为这样大家可能有一个错觉就是语言不是很重要,只要随便学一种就可以了,其实不是这样的。创立|毛病本文先容怎样在ASP.NET中产生毛病时利用VisualC#.NET代码捕捉和呼应毛病。ASP.NET改善了传统的MicrosoftActiveServerPage(ASP)中的毛病处置选项。在ASP.NET中,您可在使用程序中处置多少分歧级其余毛病。
ASP.NET中的新功效
ASP.NET在处置和呼应毛病的体例长进行了多少改善。在传统的ASP中,是用"OnErrorResumeNext"(或在Jscript顶用try-catch块)处置毛病的。大概,假如您运转的是MicrosoftInternetInformationServices(IIS)5.0,则利用ASPError工具创立自界说的毛病呈报页。但是,这些办法都有其范围性。
ASP.NET供应了在运转ASP.NET使用程序时大概呈现的毛病的多少处置和呼应级别。ASP.NET供应三种用于在呈现毛病时捕捉和呼应毛病的次要办法:page_error事务、application_error事务和使用程序设置文件(Web.config)。
本文演示怎样在ASP.NET使用程序中利用这些新功效。只管本文因为与ASP.NET间接相干而先容了怎样供应自界说毛病页和一样平常毛病呈报,可是它其实不先容其他毛病处置办法,如try-catch-finally块和大众言语运转库(CLR)非常体系。
怎样利用Page_Error事务
page_error事务供应一种捕捉在页级别呈现的毛病的办法。您能够只是显现毛病信息(正以下面的示例代码所示),也能够纪录事务或实行某个其他操纵。
备注:此示例在扫瞄器中显现具体的毛病信息,供应此示例只是为了举行申明。向使用程序的终极用户显现具体信息(特别是该使用程序在Internet上运转时)必定要当心。更得当的做法是向用户显现一条动静,告诉已产生毛病,然后将详细的毛病具体信息纪录在事务日记中。
本示例激发一个强制毛病产生在Page_Load事务中的空非常。依照以下步骤可创立将测试Page_Error事务的初始页。
依照以下步骤将名为PageEvent.aspx的新文件增加到项目中:翻开MicrosoftVisualStudio.NET。在"办理计划资本办理器"中,右键单击该项目节点,指向增加,然后单
击增加Web窗体。在称号文本框中,键进PageEvent.aspx,然后单击翻开。将以下代码增加到PageEvent.aspx中:- <SCRIPTlanguage=C#runat="server">voidPage_Load(objectsender,System.EventArgse){throw(newArgumentNullException());}publicvoidPage_Error(objectsender,EventArgse){ExceptionobjErr=Server.GetLastError().GetBaseException();stringerr="[b]errorCaughtinPage_Errorevent[/b]
- "+"
- [b]errorin:[/b]"+Request.Url.ToString()+"
- [b]errorMessage:[/b]"+objErr.Message.ToString()+"
- [b]stackTrace:[/b]
- "+objErr.StackTrace.ToString();Response.Write(err.ToString());Server.ClearError();}</SCRIPT>
复制代码 从文件菜单中,单击保留PageEvent.aspx。右键单击该页,然后单击在扫瞄器中检察以运转该页。请注重,将依照代码标准激发和呈报毛病。
备注:您大概注重到代码收回对Server.ClearError的挪用。这将避免毛病持续到要被处置的Application_Error事务中。
别的,您还应记下@Page指令中的inherits属性。
假如已设置inherits,则必需起首天生项目,然后再扫瞄到该页。
假如不起首天生项目,将看到上面的毛病信息:
Project.PageEventisnotavalidtype
怎样利用Application_Error事务
与Page_Error事务相相似,您可以使用Application_Error事务捕捉产生在使用程序中的毛病。因为事务产生在全部使用程序局限内,因而您可纪录使用程序的毛病信息或处置其他大概产生的使用程序级其余毛病。
上面的示例基于后面的Page_Error事务代码示例,假如Page_Load事务中的毛病未在Page_Error事务中捕捉,将激发非常。application_error事务在使用程序的Global.asax文件中举行指定。为复杂起见,本节中的步骤创立一个要在个中激发非常的新页,捕捉Global.asax文件的Application_Error事务中的毛病,并将该毛病写进事务日记中。上面的步骤演示怎样利用Application_Error事务:
将名为AppEvent.aspx的新文件增加到项目中:将以下代码增加到AppEvent.aspx中:- <SCRIPTlanguage=C#runat="server">voidPage_Load(objectsender,System.EventArgse){throw(newArgumentNullException());}</SCRIPT>
复制代码 从文件菜单中,单击保留AppEvent.aspx。将Application_Error事务增加到Global.asax文件中以捕捉在AppEvent.aspx页的Page_Load事务中激发的毛病。注重,您必需为System.Diagnostics称号空间将另外一条using语句增加到Global.asax,才干利用事务日记。
将以下代码增加到Global.asax文件中:- usingSystem.Diagnostics;protectedvoidApplication_Error(objectsender,EventArgse){ExceptionobjErr=Server.GetLastError().GetBaseException();stringerr="ErrorCaughtinApplication_Errorevent
- "+"Errorin:"+Request.Url.ToString()+"
- ErrorMessage:"+objErr.Message.ToString()+"
- StackTrace:"+objErr.StackTrace.ToString();EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);Server.ClearError();//additionalactions...}
复制代码 保留Global.asax文件。在VisualStudio.NET中,在天生菜单上,单击天生。右键单击该页,然后单击在扫瞄器中检察。在这类情形下该页将为空缺,可是您应当注重到在事务日记中已增加了一个新项。本示例在使用程序日记中天生一个项,可处置件检察器会见使用程序日记。在纪录毛病以后,您大概但愿将用户重定向到另外一个更用户友爱的毛病页大概依据必要实行一些其他操纵。
怎样利用Web.config文件
假如您不挪用Server.ClearError大概捕捉Page_Error或Application_Error事务中的毛病,则将依据Web.config文件的部分中的设置处置毛病。在部分,可将重定向页指定为默许的毛病页(defaultredirect)大概依据激发的HTTP毛病代码指定特定页。您可以使用此办法自界说用户收到的毛病信息。
假如产生在使用程序之前的任一级别都未捕捉到的毛病,则显现这个自界说页。本节演示怎样修正Global.asax文件,以便从不挪用Server.ClearError。因而,毛病在作为捕捉毛病的最初一点的Web.config文件中举行处置。
从上一个示例中翻开Global.asax文件。将Server.ClearError行正文失落,以便确保毛病呈现在Web.config文件中。将所作变动保留到Global.asax中。代码看起来应相似以下情势:- usingSystem.Diagnostics;protectedvoidApplication_Error(objectsender,EventArgse){ExceptionobjErr=Server.GetLastError().GetBaseException();stringerr="ErrorCaughtinApplication_Errorevent
- "+"Errorin:"+Request.Url.ToString()+"
- ErrorMessage:"+objErr.Message.ToString()+"
- StackTrace:"+objErr.StackTrace.ToString();EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);//Server.ClearError();//additionalactions...}
复制代码 将以下代码增加到部分,以便将用户重定向到自界说页:- <CUSTOMERRORSmode="On"defaultRedirect="http://hostName/applicationName/errorStatus.htm"></CUSTOMERRORS>
复制代码 备注:必需修正defaultRedirect属性中的文件路径,以便它
援用相干的Web服务器和使用程序称号。
由于在此级别捕捉的毛病会发送到默许的毛病页,以是,
必需创立一个名为ErrorStatus.htm的毛病页。请记着,您要使
用此办法来把持向用户出现的内容,因而本示例利用.htm
页作为毛病页。将以下代码增加到ErrorStatus.htm中:- <HTMLlang=utf-8xmlns="http://www.w3.org/1999/xhtml"><HEAD><METAcontent="MicrosoftVisualStudio7.0"name=GENERATOR>customErrorpage!
- Youhavebeenredirectedherefromthe<customErrors>sectionoftheWeb.configfile.
复制代码 若要测试该代码,请保留这些文件,天生项目,然后在扫瞄器中检察AppEvent.aspx。请注重,在激发毛病时,您将被重定向到ErrorStatus.htm页。
只管您可在部分中defaultRedirect属性的值中援用默许的毛病页,可是您还可依据激发的HTTP毛病代码指定要重定向到的特定页。子元素同意利用此选项。比方:
<P>- <CUSTOMERRORSmode="On"defaultRedirect="http://hostName/applicationName/errorStatus.htm">>ERRORredirect="filenotfound.htm"statusCode="404"/></CUSTOMERRORS>
复制代码 备注:在部分的defaultRedirect中指定的页是一个.htm文件。假如您盘算在.aspx页中利用GetLastError(正如Page_Error和Application_Error示例那样),则在举行重定向之前,必需将非常存储在会话变量或某个其他办法中。
请注重,部分包含设置为On的mode属性。mode属性用于把持毛病重定向产生的体例。比方,假如您正开辟使用程序,则极可能但愿检察实践的ASP.NET毛病信息,而且不但愿被重定向到更用户友爱的毛病页。mode属性包含以下设置:
on:未被处置的非常将用户重定向到指定的defaultRedirect页。此形式次要用于临盆。off:用户收到非常信息而不是被重定向到defaultRedirect页。此形式次要用于开辟。remoteonly:只要在当地盘算机上会见该站点的用户(经由过程利用localhost)才干收到非常信息。一切其他用户都被重定向到defaultRedirect页。此形式次要用于调试。
疑问解答
在Windows2000和WindowsXP上的默许安装中,ASP.NET在帮助历程中运转Web使用程序代码。此历程的标识默许为名为ASPNET的无特权当地帐户。在ASP.NET的beta版中,该历程的标识是System,这是一个功效壮大的办理员帐户,具有很多盘算机特权。
一个很大的类库。应用程序之所以难以跨平台,在于直接调用了特定平台的接口,而一个巨大的类库,就能极大地减少应用程序对平台的依赖。 |
|