none
求教!发布后的网站,在IE查看时,错误处理的代码不执行! RRS feed

  • 问题

  •     void Application_Error(object sender, EventArgs e)   
        {   
            //在出现未处理的错误时运行的代码  
            Exception exp = Server.GetLastError();  
            string path = Server.MapPath("~/Log/error.log");  
            System.IO.File.AppendAllText(path,"URL:" + Request.Url.ToString()+"\r\n Error: \r\n"   
                + exp.ToString() + "\r\n发生错误时间:" + System.DateTime.Now.ToString()+ "\r\n");  
            Response.Redirect("~/Error.aspx");  
        }  
     
    我的Global.asax写上了这样的代码!
    在vs里面调试可以把错误写入error.log。但是我发布后,在IIS配置虚拟目录。然后通过IE打开网站。进行访问一个不存在的网页。这段代码就不执行了。也就是没有文本写入error.log 也没有进行页面跳转。
    请问这个问题怎么该解决?是IIS要进行怎么配置吗?
    郭鹏
    2009年3月2日 15:12

答案

  • 确实遇到过类似的问题,我的做法是:建立一个文件系统的网站,只加一个Global.asax,将你的Global.asax里面的所有代码都移到这个里面,原来的那个文件删除,然后发布网站,勾选预编译,上传就可以了。

    这个问题如何造成的,还没有时间去深入研究

    孟宪会
    2009年3月3日 0:47
    版主
  • 这种方式保存异常日志是可以正常运行的啊,目前我做的系统里就采用了这种方式。
    我觉得不能在这个页面处理请求的转向,因为web.config里会自动为错误转向,这个地方只负责处理异常即可。
    还有必须要有写权限。我的代码:

    /// <summary> 
    /// Log the exceptions. 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    protected void Application_Error(object sender, EventArgs e) 
        var rg = new RandomGenerator(); 
     
        var log = this.Server.MapPath(string.Format("/logs/{0:yyyy-MM-dd}/{0:HHmmss}-{1}.log", DateTime.Now, rg.GenerateRandomNumbers(6))); 
     
        var lastError = this.Server.GetLastError(); 
     
        var fi = new FileInfo(log); 
        if (!fi.Directory.Exists) fi.Directory.Create(); 
     
        using (var logWritter = fi.CreateText()) 
        { 
            logWritter.WriteLine("Exception Log @ " + DateTime.Now.ToString()); 
            logWritter.WriteLine("For details please refer to the Windows Eventlog."); 
            logWritter.WriteLine("Message:            " + lastError.Message); 
            logWritter.WriteLine("RequestUrl:         " + this.Request.Url.ToString()); 
            logWritter.WriteLine("User:                     " + this.User.Identity.Name); 
     
            if (this.Request.UrlReferrer != null
                logWritter.WriteLine("UrlReferrer:        " + this.Request.UrlReferrer.ToString()); 
     
            logWritter.WriteLine("UserHostAddress:    " + this.Request.UserHostAddress); 
            logWritter.WriteLine("Detail:"); 
            logWritter.Write(lastError.ToString()); 
        } 



    Facing problems, think first, then search, finally ask.
    2009年3月3日 9:32
    版主

全部回复

  • 确实遇到过类似的问题,我的做法是:建立一个文件系统的网站,只加一个Global.asax,将你的Global.asax里面的所有代码都移到这个里面,原来的那个文件删除,然后发布网站,勾选预编译,上传就可以了。

    这个问题如何造成的,还没有时间去深入研究

    孟宪会
    2009年3月3日 0:47
    版主
  • 这种方式保存异常日志是可以正常运行的啊,目前我做的系统里就采用了这种方式。
    我觉得不能在这个页面处理请求的转向,因为web.config里会自动为错误转向,这个地方只负责处理异常即可。
    还有必须要有写权限。我的代码:

    /// <summary> 
    /// Log the exceptions. 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    protected void Application_Error(object sender, EventArgs e) 
        var rg = new RandomGenerator(); 
     
        var log = this.Server.MapPath(string.Format("/logs/{0:yyyy-MM-dd}/{0:HHmmss}-{1}.log", DateTime.Now, rg.GenerateRandomNumbers(6))); 
     
        var lastError = this.Server.GetLastError(); 
     
        var fi = new FileInfo(log); 
        if (!fi.Directory.Exists) fi.Directory.Create(); 
     
        using (var logWritter = fi.CreateText()) 
        { 
            logWritter.WriteLine("Exception Log @ " + DateTime.Now.ToString()); 
            logWritter.WriteLine("For details please refer to the Windows Eventlog."); 
            logWritter.WriteLine("Message:            " + lastError.Message); 
            logWritter.WriteLine("RequestUrl:         " + this.Request.Url.ToString()); 
            logWritter.WriteLine("User:                     " + this.User.Identity.Name); 
     
            if (this.Request.UrlReferrer != null
                logWritter.WriteLine("UrlReferrer:        " + this.Request.UrlReferrer.ToString()); 
     
            logWritter.WriteLine("UserHostAddress:    " + this.Request.UserHostAddress); 
            logWritter.WriteLine("Detail:"); 
            logWritter.Write(lastError.ToString()); 
        } 



    Facing problems, think first, then search, finally ask.
    2009年3月3日 9:32
    版主
  •  好像是这句出错了
    System.IO.File.AppendAllText(path,"URL:" + Request.Url.ToString()+"\r\n Error: \r\n"      
                + exp.ToString() + "\r\n发生错误时间:" + System.DateTime.Now.ToString()+ "\r\n");     
     
    IIS里面好像没有写权限。我在属性->虚拟目录里面的写入打上了勾。但是还是不能写。该怎么弄?
    郭鹏
    2009年3月3日 15:09
  • 你先看看path这个值是否已经存在,并检查这个文件所在的文件夹是否真实存在,如果不存在,先创建一个
    孟宪会
    2009年3月4日 0:57
    版主