当前位置: 代码迷 >> ASP.NET >> 实现项目中出现错误,将错误信息写入文本文件中的功能.在测试的时候,为什么总是引发两次错误,内有代码
  详细解决方案

实现项目中出现错误,将错误信息写入文本文件中的功能.在测试的时候,为什么总是引发两次错误,内有代码

热度:3319   发布时间:2013-02-25 00:00:00.0
实现项目中出现异常,将异常信息写入文本文件中的功能.在测试的时候,为什么总是引发两次异常,内有代码~
Global.asax文件的关键代码:
void Application_Error(object sender, EventArgs e) 
{
  Exception x = Server.GetLastError().GetBaseException();
  Logger logger = new Logger();
  Logger.ErrorInfo info = new Logger.ErrorInfo("aaa", "TestApp", x.ToString());
  //将错误信息记录到文本文件中
  logger.SetErrorLog(info);
}

--------------------------------------------------------------------------------------------------------------------
web.config文件关键代码:
<system.web>
  <customErrors mode="On" defaultRedirect="Error">
  </customErrors>
  </system.web>

---------------------------------------------------------------------------------------------------------------------

我在一个页面引发一个异常,如果<customErrors>元素的mode设置为On,则Application_Error执行两次,其中第一次是我引发的异常执行一次
,但不明白第二次引发的异常从哪来的(第二次引发异常的信息描述为"System.Web.HttpException: 文件不存在"),什么文件不存在?
但将Mode设置为RemoteOnly就没有问题,什么呢?

------解决方案--------------------------------------------------------
Error
------解决方案--------------------------------------------------------
顶 高手进来吧
------解决方案--------------------------------------------------------
ding
------解决方案--------------------------------------------------------
加上Server.ClearError();
可以参考一下下面的代码:
C# code
protected void Application_Error(Object sender, EventArgs e){    try    {        if(Convert.ToInt32(Application["tag"])>2)        {            Application["tag"]=1;            return;        }        Application["tag"]=Convert.ToInt32(Application["tag"])+1;        Exception objErr = Server.GetLastError().GetBaseException();        Application["errorPage"] = Request.Url.ToString();        Application["errorMsg"] =objErr.Message;        Server.ClearError();        Response.Redirect("Error.aspx");    }    catch{}}
------解决方案--------------------------------------------------------
改为RemoteOnly
------解决方案--------------------------------------------------------
呵呵,没研究
------解决方案--------------------------------------------------------
Error存在吗? 
当custom errors mode="on"时 因为你是在本机调试 系统既是服务器端又是客户端 所以捕获异常后 还要作为客户端执行自定义的那个出错页 找到不 就错了
------解决方案--------------------------------------------------------
1、学习
------解决方案--------------------------------------------------------
跟踪吧。
------解决方案--------------------------------------------------------
呵呵,楼主在深入啊,确实没有研究过。
------解决方案--------------------------------------------------------
如果楼主有Error文件的话,确实比较奇怪,理论上说一共有两个在异常未处理时将被ASP.NET调用的事件:
Page_Error event,提供捕获在Page级别发生错误的方法。
Application_Error event,提供捕获在代码中的任何地方发生错误的方法。
先执行Page_Error,后执行Application_Error。Page_Error中处理错误之后使用Server.ClearError方法清除最后一个错误,可以避免再调用Application_Error。
------解决方案--------------------------------------------------------
探讨
引用:
Error存在吗?
当custom errors mode="on"时 因为你是在本机调试 系统既是服务器端又是客户端 所以捕获异常后 还要作为客户端执行自定义的那个出错页 找到不 就错了


存在的啊,都显示出来了啊

------解决方案--------------------------------------------------------
如果有类间有继承判断可能会执行两次或多次
我的环境下配置为On时只执行一次
------解决方案--------------------------------------------------------
  相关解决方案