ASP.NET Web API を使用して実装された REST サービスがあります。何らかの理由で、同じアプリケーション内からエンドポイントの 1 つを呼び出し、エンドポイントからの応答を取得するのにかかった時間をレポートする必要がありました。このために、以下のアクションを持つ通常の 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
クラスを使用して、同じ Web サイトでホストされている REST エンドポイントを呼び出しています。依頼前後の時間を記録し、その時間を返します。
問題
このルートを呼び出して、記録された応答時間を取得する監視ツールがあります。監視ツールは、このルートを 1 分ごとに呼び出します。これは通常、しばらくの間機能しhttpWebRequest.GetResponse()
、明らかな理由もなくタイムアウトを開始します。イベント ログと IIS ログには何も記録されません。
アプリケーションプールを再起動すると、このことはしばらくの間再び機能し始め、しばらくすると停止します。
上記のことは機能していませんが、REST エンドポイントを自分で手動で呼び出すと機能します。したがって、REST エンドポイントに問題はありません。
この時点で私は完全に無知です。どんな助けでも大歓迎です。