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

问题描述:

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

是否有处理传统ASP 3中的错误/异常的指导原则? Server.GetLastError()没有太多的工作...

我在找一些像在ASP.Net Global.asax中找到的Application_Error()

global.asa中的任何等价物?要智能记录错误的类?像旧的企业库异常处理ASP3 ...

嘿,我是一个梦想家!

非常感谢任何指针

+0

我们可以假设你正在加载VB6对象吗? – ChaosPandion 2009-10-21 21:35:33

+0

您是否认为可以在.net中创建一个IHttpModule,并将您的模块附加到网站上,以便将错误捕获到网站上? – 2009-10-22 12:42:29

+0

您可以举一个您关心的Global.ASA中的应用程序级活动的例子吗?除了ON ERROR RESUME NEXT,我不认为有太多... – CLaFarge 2015-06-22 02:09:23

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  

请问这个窝K +当新创建的实例超出范围时,将调用'class_terminate'方法。当interperter碰到'end with'语句或者由于错误导致callstack解开时,会发生这种情况。与原生Python方法相比,它不太漂亮,但它工作得很好,而且不难看。

对于顶级错误处理,您可以使用相同的技术。这一次不要使用with语句,而是创建一个错误处理程序的全局实例。请注意,ASPError对象提供的server.getLastError()与vbscript err对象不同,只有在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 
+0

你的意思是在每个请求中创建一个cDebugger对象吗? – 2009-10-22 17:55:41

+0

确实。我们在应用程序中有两个调试类。在生产中,我们使用每个电子邮件发送一个错误报告,而在开发中我们使用一个将调试日志转储到屏幕上的报告。通过应用程序对象中的设置完成开发和生产之间的切换。 – 2009-10-26 12:00:06

+0

@JoostMoesker我明白CustomErrorHandler方法(try..catch..finally),但我不明白cDebugger方法的顶级错误处理。请你能举一个更详细的例子吗? – Oliver 2016-09-21 07:42:38

<% On Error Resume Next %> 

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

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

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

您可以得到最接近的(AFAIK)使用IIS中的Custom Errors功能指向其他文件或URL以处理该错误。

Custom Errors Image

在我看来,是太麻烦了。这是一个缺失的功能,可以让我迁移一些网站,只为了知道该网站正常运行而无任何错误。

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

+0

有没有办法做到这一点**只有**的ASP错误,以便在.NET代码中的500错误不重定向? – 2014-05-05 17:01:56

+0

@JoshuaFrank我认为错误500:100仅适用于ASP错误 – Oliver 2016-09-21 07:43:36