2014-09-29 74 views
2

我正在使用C#編寫適用於.NET 4.5.1的MVC web應用程序,我正在使用一個外部dll庫。似乎這個庫偶爾會拋出AccessViolationException。ASP.NET MVC應用程序是否在AccessViolationException中自動重啓?

我試圖捕獲異常與

[HandleProcessCorruptedStateExceptions] 

屬性及與

HttpRuntime.UnloadAppDomain(); 

重啓catch塊中的應用程序。 這工作有點好,但有時這種異常旁路嘗試阻止和崩潰。

IIS是否處理崩潰並通過重新啓動自動從此異常中恢復應用程序,或者是否有我需要做的事情?

+0

IIS應該從故障中恢復並回收,並使站點備份。確保使用web.config中定義的機器鍵來限制最終用戶出現問題。 – 2014-09-29 20:05:45

+0

至於我,你需要找到爲什麼外部庫失敗,並嘗試避免這種情況,因爲重新啓動應用程序池是非常不友好的WebApp用戶,因爲它會導致會話丟失\延遲由於應用程序域重新啓動 – 2014-09-29 20:21:30

回答

1

未經檢查的異常通常不會導致appdomain卸載或應用程序池循環。如果您獲得未經檢查的例外情況,則可以考慮使用ELMAH來捕獲並記錄例外情況,以便您可以明白爲什麼它們首先發生。

讓你的appdomain週期性地卸載來「處理異常」將是一件非常可怕的事情,我會建議試圖弄清楚爲什麼他們首先發生。

+0

損壞的狀態異常不是典型的可以忽略的未經檢查的異常,因爲它們可能會破壞應用程序池進程的狀態,並且Microsoft不建議執行具有損壞狀態的應用程序。 – 2014-09-29 20:19:28

1

「IIS是否處理崩潰並通過重新啓動自動從此異常中恢復應用程序,或者是否有我需要做的事情?

您應該始終避免崩潰以保持用戶體驗並避免您的應用被黑客入侵。 @cobolstinks Elmah的建議只會提供堆棧跟蹤,如果它可用,這將無濟於事。

AccessViolationException與非託管代碼相關聯,並且您的第三方庫似乎是問題的根源,但是您需要在服務器上附加調試程序以監視此問題並在發生時捕獲轉儲。

您應該在服務器上安裝DebugDiag並完成Crash-Hang-Analysis報告。

確保您獲得最新版本: http://www.microsoft.com/en-gb/download/details.aspx?id=42933

當發生崩潰時,這將提供一個報告,讓您更深入瞭解您的問題比ELMAH可以。

+0

如何獲得堆棧跟蹤沒有幫助?如果沒有其他人可以將其帶回圖書館所有者進行進一步診斷,或者可以通過錯誤報告提交。 – cobolstinks 2014-09-29 23:28:58

+0

同意,Elmah捕獲的堆棧跟蹤可能會提供一些錯誤的上下文,如果它按預期起泡。它可能不會,即使它做了,它也不會提供將在崩潰掛起分析中呈現的詳細應用程序狀態信息。當發生錯誤時,供應商肯定會問你的應用程序的狀態。 – 2014-09-30 20:26:36

相關問題