У нас есть простое приложение в 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.У кого-нибудь из вас есть идея или у вас уже возникла такая же проблема?