2014-11-25 56 views
5

我有一個MVC + SignalR應用程序,它有很多Reactive Extensions訂閱,其中所有這些都是實時來自Socket的數據預測。其中一些訂閱並不按預期工作,當他們提出異常時,它就會進入虛空,除非我正在調試。在Elmah後臺線程中捕獲異常

我希望我可以使用Elmah來自動記錄這些未處理的異常,但似乎除非異常發生在處理請求/響應的同一線程上,例如它會導致死亡的黃色屏幕,否則Elmah不會「不要碰它。所以我的問題是雙重的:

  1. 我可以讓Elmah自動在背景/工作進程上記錄異常嗎?

  2. 如果#1的答案是「否」,除了將我的訂閱包裝在try/catch塊中的高層次之外,我的下一個最佳選擇是什麼?

+0

不知道是R x爲這裏有關,核爆的標籤 - 如果你有一個特定的RX-問題,請重新添加 – 2014-11-25 19:19:37

+0

@PaulBetts無擴展這裏涉及只要這就是我的情況下在工作進程上運行的東西。但是如果答案適用於我的情況,它應該適用於標題中所述相同問題的任何人。 – joelmdev 2014-11-26 01:57:41

回答

1

廣告1)如果它不發生,它可能不會。

我不知道你如何使用後臺線程,但我會嘗試解釋是否ELMAH處理正在工作。 ELMAH集成到ASP.NET管道中,當發生錯誤時,它由ASP.NET管道處理,它顯示錯誤頁面(如http錯誤500)並調用ErrorLogModule。此外引述Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components -> Adding ELMAH to an ASP.NET Web Application

的部分將所述ErrorLogModule HTTP模塊向 ASP.NET HTTP管道。確保包含此設置,否則ELMAH將不會偵聽錯誤事件,因此 不會記錄任何未處理的異常。

廣告2)因爲你正在使用無擴展,你可以處理onError在其中您可以自動登錄到ELMAH。如果你不想在任何地方寫錯OnError的錯誤,只需創建你自己的函數或方法擴展,它會自動爲你包裝它。寫入ELMAH手工很簡單隻要致電:

Elmah.ErrorSignal.FromCurrentContext().Raise(ex); 
+1

在應用程序池的後臺線程或工作線程中,當前上下文爲空,然後使該方法調用引發異常。我目前正面臨着這個問題。 – Roman 2016-11-02 20:15:50