WebApi处理委托处理程序中的异常+ ExceptionLoggers

时间:2017-12-19 10:33:58

标签: c# asp.net-web-api logging exception-handling async-await

我有一个.NET WebApi项目,它在管道中添加了两个DelegatingHandler子类 - 一个处理请求/响应日志记录的外部处理程序,以及一个处理各种形式的身份验证的内部处理程序。我们还有一个记录异常的全局ExceptionLogger(例如,抛出ValidationException的请求将有两个日志条目 - 请求+响应和异常。)

我们的问题是,对于某些请求,非常罕见,在ExceptionLogger中捕获的异常和记录的异常之间存在5-30秒的延迟,并且在记录委派处理程序中捕获异常。我们的日志记录委托处理程序看起来像这样......

try
{
    // an exception is thrown here...
    var response = await base.SendAsync(request, cancellationToken);
    await LogRequestResponse(request, requestContent, response, stopwatch);
    return response;
}
catch (Exception e)
{
    // ...but isn't caught here until up to 30 seconds later
    var response = request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
    await LogRequestResponse(request, requestContent, response, stopwatch);
    throw;
}

身份验证委托处理程序是'内部'到记录器,但它没有尝试捕获异常或做任何其他事情。此时数据库中也没有任何活动,并且在将消息发布到我们的消息队列时没有延迟。

奇怪的是,这只发生在两个特定的,不相关的路由上 - 即使是相同类型的其他请求和异常,也以相同的方式处理,没有这个问题。

任何有关可能原因或在哪里寻找的指示都将非常感激。

0 个答案:

没有答案