我有一个使用 ASP.NET Web API 实现的 REST 服务。由于某些原因,我需要从同一应用程序中调用其中一个端点并报告从端点获得响应所花费的时间。为此添加了一个普通的 MVC 控制器,其操作如下
public class HealthMonitoringController : Controller
{
//
// GET: /HealthMonitoring/
public ContentResult GetResponseTime(string id)
{
var startDateTime = DateTime.Now;
var httpWebRequest = (HttpWebRequest) WebRequest.Create(<<REST endpoint>>);
httpWebRequest.Method = WebRequestMethods.Http.Get;
httpWebRequest.Accept = "application/json;charset=utf-8";
httpWebRequest.Headers.Add("Accept-Language", "en-GB");
httpWebRequest.GetResponse();
var duration = (int) DateTime.Now.Subtract(startDateTime).TotalMilliseconds;
return Content(String.Format("response time:{0}", duration.ToString(CultureInfo.InvariantCulture)));
}
}
正如您在上面看到的,我正在使用一个HttpWebRequest
类来调用托管在同一网站中的 REST 端点。我记录了请求前后的时间并返回该时间。
问题
我们有一个监控工具,它调用这条路线来获取记录的响应时间。监控工具每 1 分钟调用一次该路由。这通常会工作一段时间,然后httpWebRequest.GetResponse()
无明显原因开始超时。事件日志和 IIS 日志中没有任何内容
如果我重新启动应用程序池,这个东西会再次开始工作一段时间,然后在一段时间后停止。
虽然上述事情不起作用,但如果我让 REST 端点手动调用自己,它就会起作用。所以 REST 端点没有问题。
在这一点上我完全一无所知。任何帮助将非常感激。