1

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 エンドポイントに問題はありません。

この時点で私は完全に無知です。どんな助けでも大歓迎です。

4

1 に答える 1