Застревание соединений HTTP-запросов ASP.Net Core - PullRequest
0 голосов
/ 04 февраля 2019

У нас есть простое приложение в ASP.NET Core, которое вызывает веб-сайт и возвращает содержимое.Метод Controller выглядит следующим образом:

[HttpGet("test/get")]
public ActionResult<string> TestGet()
{
    var client = new WebClient
    {
        BaseAddress = "http://v-dev-a"
    };
    return client.DownloadString("/");
}

URL-адрес, который мы называем, является просто страницей по умолчанию IIS.Я использую Apache JMeter для тестирования 1000 запросов за 10 секунд.У меня всегда одна и та же проблема, после примерно 300-400 запросов она зависает на несколько минут и ничего не работает.Приложение, которое содержит контроллер, полностью заморожено.В мониторе производительности (MMC) я вижу, что соединение на 100%.

Я пробовал тот же код с ASP.NET 4.7.2, и он работает без каких-либо проблем.

Я также читал о том, что утилизация WebClient не работает, и я должен сделать его статическим.См. здесь Также не помогло отключение KeepAlive:

public class QPWebClient : WebClient
{
   protected override WebRequest GetWebRequest(Uri address)
   {
      var request = base.GetWebRequest(address);
      if (request is HttpWebRequest)
      {
         ((HttpWebRequest)request).KeepAlive = false;
      }
      return request;
   }
}

У HttpClient та же проблема, она ничего не меняет

С внедрением зависимости, как рекомендовано здесь есть исключение, которое веб-клиент не может обрабатывать больше запросов одновременно.

Еще одна неудачная попытка состояла в том, чтобы изменить ConnectionLimit и SetTcpKeepAlive в ServicePoint

Так что у меня нет идей, как решить эту проблему.Последняя идея - перенести приложение в ASP.NET.У кого-нибудь из вас есть идея или у вас уже возникла такая же проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...