我的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项,以便稍后在应用中使用。
Validate
是一个非常轻量级的数据库查询。 Log
方法将请求的数据(例如URI和查询字符串等)插入数据库。
有时候,我会对应用程序产生一种奇怪的行为:它只会下降!没有日志,没有错误,没有。只是服务器不响应请求。我必须重新启动应用程序(例如,通过在web.config
中进行虚假更改)才能恢复工作。该应用程序是一个非常简单的应用程我在.NET 4.5平台上使用ASP.NET Web API 2,它运行在IIS 7.5计算机上。我能想到的唯一地方是提到的委托处理程序,它可能导致错误。你有什么主意吗?委派处理程序是否有任何可能导致应用程序关闭的性能副作用?
答案 0 :(得分:0)
对你的问题的(非常)简短回答是否定的。 DelegatingHandler
本身并没有什么固有的东西会导致你的应用程序陷入停顿。问题更可能是你在做内部的问题。可能是数据库调用,可能是日志记录。我建议使用分析工具来确定事情的起因。