我在我的ASP.net MVC項目中有一些代碼異步調度消息。在某些情況下,這些代碼可能會失敗並導致無用的異常。我沒有直接訪問拋出異常的代碼或生成線程的代碼,所以我無法捕捉並處理錯誤。我試圖捕捉Global.asax中的Application_Error級別,但該函數僅針對頁面錯誤而不是後臺錯誤。我也嘗試通過實現OnUnhandledException來捕獲HTTP模塊,但我無法找到異常並阻止工作進程在那裏存在。如何防止ASP.net WP終止錯誤
有沒有一種方法,以防止如此致命的這些錯誤?我知道他們是嚴重的錯誤,應該處理,但我寧願他們不要終止其他頁面上的其他用戶的工作進程。
更多細節:
的消息調度是EventStore,我相信我有這種情況下的問題是,它試圖反序列化,其實現的ICommand從以前版本的NServiceBus的消息。在更新到最新的測試版之後,似乎反序列化失敗了。不幸的是,我愚蠢地刪除了導致錯誤的提交,所以我不能完全重複該問題。
到目前爲止,我已經找到了模擬誤差,最好的辦法是做
public virtual ActionResult Error()
{
Task.Factory.StartNew(blowup);
return new EmptyResult();
}
private void blowup()
{
throw new Exception("snap");
}
你會發現捕捉異常被拋出,妥善處理,而不會造成問題。但是,如果您等待,那麼我們沒有觀察到任務的異常屬性,最終會終止整個應用程序。
測試對卡西尼但在IIS 7.5中類似的行爲觀察。
這是一個很好的說明,但我對任務的使用只是一個快速的方式來顯示後臺線程異常沒有被捕獲。 – stimms 2012-02-23 21:56:54
我的建議將處理_all_未處理的異常(如果您還收縮到UnhandledException事件)。 – usr 2012-02-23 22:01:24
啊好吧,太好了。我現在可以高興地攔截並記錄異常,但它仍然會降低工作進程。我發現關鍵是將異常設置爲觀察到的http://blogs.microsoft.co.il/blogs/bondib/archive/2011/02/08/crashes-task-parallel-library-tpl-and-the-unobservedtaskexception .aspx – stimms 2012-02-23 22:50:34