2015-07-02 342 views
0

我已经安装了Elmah.WebApi和elmah.Mvc的nuget包,它捕获了很多我的错误。然而,我有一个并行的foreach循环,它抛出一个错误,而不被elmah捕获/记录。Elmah错误处理WebAPI 2

我假设的NuGet包将实现此处指定的类和接口:http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling

是否有您需要申请捕捉发生在不同的线程错误额外的过滤器?我猜这同样适用于使用异步/等待?

任何帮助或指导表示赞赏

编辑(添加的代码)

Parallel.ForEach(serviceHeaders, new ParallelOptions() { MaxDegreeOfParallelism = 8 }, patientGroup => 
{ 
    ... 
} 
+0

返回后发生异常。你如何运行你的“并行循环”?它使用'await'还是将它排队在线程池上?如果你排队,Elmah不会接受它。 –

+0

嗨,本杰明,我已经添加了如何运行并行循环。我认为这个错误会通过调用方法等回升,并被elmah抓住。这不是这种情况吗? – Phil

回答

1

如果你的Web API作为IExceptionLogger(可能是由NuGet包自动完成)注册ELMAH,它需要HttpContext的当前主线程。只要该上下文消失,即您返回给客户端,则不会再捕获任何异常。

您可能能够使用ELMAH为manual logging没有请求上下文,但要解决这个正确的方法是,如果你不使用分布式系统,如天青WebJobs,队列/通讯系统等

想要走得那么远,等待异步操作可能会更好,Elmah会捕获异常。

更多信息here

0

原来,elmah确实捕获了并行线程中引发的错误。每个错误都会添加到AggregateException中,因为每个线程理论上可能会在同一时间抛出错误。更多信息可以在这里找到:https://msdn.microsoft.com/en-us/library/dd460695(v=vs.110).aspx

但是,我遇到的问题是与我的问题完全无关的东西!