2008-10-09 91 views
4

我想使用ASP.net健康監測從asmx網絡服務記錄未處理的異常。我在web.config中啓用了健康狀況監控,但它沒有記錄任何內容。健康監測與asmx網絡服務一起工作嗎?我搜索了一下,看起來其他人都問過同樣的問題,但從來沒有得到明確的答案。ASP.net健康監測與asmx網絡服務工作

回答

9

請不要發佈回覆,除非它回答了被問到的問題。除了這個問題之外,一半的答案會讓讀者感到困惑。健康監控與「真正未處理」的ASP.NET異常或Application_Error事件無關。

答案是否定的。我已經深入瞭解了這一點,出於某種原因,Web方法中引發的異常從未將其提供給健康監視提供程序。它看起來像你必須趕上他們,並處理好自己。

1

正常解釋未處理的異常和湯姆指的是有區別的。什麼湯姆指的是真正的未處理的異常,這將殺死你的w3wp.exe進程(它有一個機會來記錄它之前),因爲我已經在博客這裏: http://www.improve.dk/blog/2008/04/07/spawning-threads-in-aspnet-can-be-dangerous

正常未處理的異常會導致發生異常並向用戶/被調用者顯示錯誤頁面。它不會崩潰你的w3wp.exe進程。這些例外情況應該由健康狀況監測提供。

0

CALM產品應該在這種情況下工作;讓我知道如果它不 - 我寫它;-)

+0

你的產品可能工作,但你的鏈接不:) :) – frankadelic 2010-04-30 16:24:18

+0

@frankadelic:對不起,我們正在重做網站和改變託管服務提供商的過程中,一切都還在;給我發一封電子郵件(nov8r.com上的steven dot lowe),如果你想嘗試一下,我會發給你安裝程序 – 2010-05-03 11:28:28

1

在Global.asax中,如果您使用由Visual Studio自動生成的一個,您可以將代碼添加到Application_Error方法來處理異常和日誌他們以你選擇的任何方式。您也可以重寫Init方法併爲該類的Error事件添加一個事件處理程序。

無論哪種情況,您只會得到一個無益的vanilla EventArgs對象,但是您可以使用HttpContext.Current.Server.GetLastError()來獲取發生的異常。

正如另一張海報中提到的,這可能無法捕獲異步運行委託,自己啓動的線程或使用Page.RegisterAsyncTask()創建的異步頁面任務引發的異常。在這些上,您總是需要確保實現具有異常後端停止,以便可以捕獲異常並且IIS工作進程不會中止。