我们在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在10秒内测试1000个请求。我总是遇到同样的问题,大约300-400次请求后,它卡住了几分钟,却无济于事。包含控制器的应用程序已完全冻结。 在性能监视器(MMC)中,我看到连接已达到100%。
我在ASP.NET 4.7.2中尝试了相同的代码,并且运行时没有任何问题。
我还了解到WebClient的处置不起作用,应该将其设置为静态。参见here 另外,停用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有相同的问题,它没有任何改变
使用推荐的here这样的依赖项注入会引发异常,Web客户端无法同时处理更多请求。
另一种失败的尝试是在ServicePoint中更改ConnectionLimit和SetTcpKeepAlive
所以我不知道如何解决此问题。最后的想法是将应用程序移动到ASP.NET。你们中有人有想法或面临过同样的问题吗?