在经典ASP中,有没有办法在应用程序级别处理错误?
是否有处理传统ASP 3中的错误/异常的指导原则? Server.GetLastError()使用起来不是很多......
我正在寻找像ASP.Net Global.asax中找到的Application_Error()
之类的内容。
global.asa中的任何等效内容?用于智能地记录错误的类?就像ASP3的旧企业库异常处理......
嘿,我是一个梦想家!非常感谢 任何 指针
答案 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
功能指向其他文件或网址来处理错误。
在我看来,太麻烦了。这是一个缺少的功能,让我迁移一些网站,只是为了安心,知道该网站正常工作。
答案 2 :(得分:3)
我将IIS中的500错误页面映射到自定义错误处理.asp页面。然后,此页面使用Server.GetLastError获取最后一个错误,向我发送一封电子邮件,其中包含有关错误,查询字符串,服务器变量等的详细信息。然后,它会向用户显示友好消息。
答案 3 :(得分:0)
<% On Error Resume Next %>
If Err.number <> 0 then 'do other stuff