2014-11-25 23 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