1

我的 api 项目中有这个委托处理程序:

class MyHandler : DelegatingHandler {
    protected override async Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, 
        CancellationToken cancellationToken) {
        var info = GrabSomeParametersFromHeader();
        var isValid = await Validate(info); // this is a very light database query
        if (!isValid) {
            Log(request, info, false);
            var response = new HttpResponseMessage(HttpStatusCode.Forbidden);
            return response;
        }
        HttpContext.Current.SetMobileRequestInfo(info);
        var result = await base.SendAsync(request, cancellationToken);
        Log(request, info, result.IsSuccessStatusCode && 
        result.StatusCode == HttpStatusCode.OK);
        return result;
    }
}

HttpContext.Current.SetMobileRequestInfo只需添加info对象添加到 http-items 以便稍后在应用程序中使用。

Validate是一个非常轻量级的数据库查询。和Log方法是将请求的数据(如URI和查询字符串等)插入数据库。

有时,我的应用程序会出现奇怪的行为:它只是崩溃了!没有日志,没有错误,什么都没有。只是服务器不响应请求。我必须重新启动应用程序(例如通过在 中进行虚假更改web.config)才能使其恢复工作。该应用程序是一个非常简单的应用程序。我在 IIS 7.5 机器上运行的 .NET 4.5 平台上使用 ASP.NET Web API 2。我唯一能想到的地方是提到的委托处理程序,这可能会导致错误。你有什么主意吗?委托处理程序是否有任何可能导致应用程序关闭的性能副作用?

4

1 回答 1

0

对您的问题的(非常)简短的回答是否定的。s 本身没有任何固有的东西DelegatingHandler会导致您的应用程序停止运行。问题更有可能在于您在其中所做的事情。可能是数据库调用,可能是日志记录。我建议使用分析工具来找出挂断的地方。

于 2015-04-16T13:46:06.703 回答