我有一个.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;
}
身份验证委托处理程序是'内部'到记录器,但它没有尝试捕获异常或做任何其他事情。此时数据库中也没有任何活动,并且在将消息发布到我们的消息队列时没有延迟。
奇怪的是,这只发生在两个特定的,不相关的路由上 - 即使是相同类型的其他请求和异常,也以相同的方式处理,没有这个问题。
任何有关可能原因或在哪里寻找的指示都将非常感激。