2009-10-21 61 views
11

在傳統的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

回答

10
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

5

不幸的是,Global.ASA僅提供了Application_OnStart, Application_OnEnd, Session_OnStart and Session_OnEnd方法。沒有錯誤處理。

您可以得到最接近的(AFAIK)使用IIS中的Custom Errors功能指向其他文件或URL以處理該錯誤。

Custom Errors Image

在我看來,是太麻煩了。這是一個缺失的功能,可以讓我遷移一些網站,只爲了知道該網站正常運行而無任何錯誤。

3

我將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

相關問題