.net核心webapi导致iis应用程序池关闭

时间:2018-04-11 19:04:01

标签: iis asp.net-web-api asp.net-core

背景

我构建.net核心webapi几乎不会检查给定的URL是否存在并返回结果。如果存在URL并且是重定向(301,302),则api将遵循重定向并返回该结果。 webapi由SPA调用,它对checkrequest-queue中的每个给定URL进行api调用。因此,如果有人在队列中添加了500个网址,SPA将循环播放该网址,并向API发送500次调用 - 这是我可以改进的。

问题:

由于高CPU使用率和/或内存使用率,我的IIS应用程序池正在定期关闭:

A worker process serving application pool 'api.domain.com(domain)(4.0)(pool)' has requested a recycle because it reached its private bytes memory limit.

让我的API再次运行的唯一方法是手动重启应用程序。我不认为API所执行的操作是那么苛刻,但我肯定在这里做错了。有人可以帮帮我吗? SPA调用的代码是:

var checkResponse = new CheckResponse();

    var httpMethod = new HttpMethod(request.HttpMethod.ToUpper());
    var httpRequestMessage = new HttpRequestMessage(httpMethod, request.Url);

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

    var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage);
    checkResponse.RequestMessage = httpResponseMessage.RequestMessage;
    checkResponse.Headers = httpResponseMessage.Headers;
    checkResponse.StatusCode = httpResponseMessage.StatusCode;

    switch (httpResponseMessage.StatusCode)
    {
      case HttpStatusCode.Ambiguous:
      case HttpStatusCode.Found:
      case HttpStatusCode.Moved:
      case HttpStatusCode.NotModified:
      case HttpStatusCode.RedirectMethod:
      case HttpStatusCode.TemporaryRedirect:
      case HttpStatusCode.UseProxy:

        var redirectRequest = new CheckRequest
        {
          Url = httpResponseMessage.Headers.Location.AbsoluteUri,
          HttpMethod = request.HttpMethod,
          CustomHeaders = request.CustomHeaders
        };

        checkResponse.RedirectResponse = await CheckUrl(redirectRequest);
        break;
    }

我的ApiController上的动作:

[HttpPost]
public async Task<IActionResult> Post([FromBody] CheckRequest request)
{
  if (!ModelState.IsValid)
  {
    return BadRequest(ModelState);
  }

  var result = await CheckService.CheckUrl(request);

  return Ok(result);
}

0 个答案:

没有答案