在传统的ASP中,有没有办法在应用程序级别处理错误?

时间:2009-10-21 21:31:22

标签: asp-classic error-handling

在经典ASP中,有没有办法在应用程序级别处理错误?

是否有处理传统ASP 3中的错误/异常的指导原则? Server.GetLastError()使用起来不是很多......

我正在寻找像ASP.Net Global.asax中找到的Application_Error()之类的内容。

global.asa中的任何等效内容?用于智能地记录错误的类?就像ASP3的旧企业库异常处理......

嘿,我是一个梦想家!

非常感谢 任何 指针

4 个答案:

答案 0 :(得分:12)

try:
    some code that can raise an error
except:
    do error handeling stuff
finally:
    clean up, close files etc

可以在vbscript中模拟如下:

class CustomErrorHandler
    private sub class_terminate
        if err.number > 0 then
            do error handeling stuff
        end if 
        clean up, close files etc
    end sub
end class    


with new CustomErrorHandler
    some code
    ...
end with    

这是如何工作的?当新创建的实例超出范围时,将调用'class_terminate'方法。当interperter命中'end with'语句或者callstack由于错误而被解除时,就会发生这种情况。它不像原生的python方法那么漂亮,但是效果很好而且不丑。

对于顶级错误处理,您可以使用相同的技术。这次不使用with语句,而是创建错误处理程序的全局实例。请注意,提供的ASPError对象server.getLastError()与vbscript错误对象不同,只有在IIS完成其server.transfer到500:100错误处理程序并返回到您的页面以收集垃圾。示例处理程序:

class cDebugger
  public sub do_debug
     ' print debug data here
  end sub
  public sub class_terminate
    if server.getlasterror().Number <> 0 then
        response.clear
        call do_debug
    end if
  end sub
end class

答案 1 :(得分:6)

不幸的是,Global.ASA只提供Application_OnStart, Application_OnEnd, Session_OnStart and Session_OnEnd方法。没有错误处理。

您最接近(AFAIK)使用IIS中的Custom Errors功能指向其他文件或网址来处理错误。

Custom Errors Image

在我看来,太麻烦了。这是一个缺少的功能,让我迁移一些网站,只是为了安心,知道该网站正常工作。

答案 2 :(得分:3)

我将IIS中的500错误页面映射到自定义错误处理.asp页面。然后,此页面使用Server.GetLastError获取最后一个错误,向我发送一封电子邮件,其中包含有关错误,查询字符串,服务器变量等的详细信息。然后,它会向用户显示友好消息。

答案 3 :(得分:0)

<% On Error Resume Next %>

If Err.number <> 0 then 'do other stuff

链接:http://www.15seconds.com/issue/990603.htm