在旧的WCF时代,您可以通过MaxConcurrentCalls设置控制服务并发性. MaxConcurrentCalls默认为16个并发呼叫,但您可以根据需要提高或降低该值.
如何在.NET Core Web API中控制服务器端并发?在我们的情况下,我们可能需要限制它,因为太多并发请求可能会影响整体服务器性能.
解决方法
ASP.NET Core应用程序并发由其
web server处理.例如:
红隼
var host = new WebHostBuilder() .UseKestrel(options => options.ThreadCount = 8)
通常,由于基于Kestrel异步的实现,您不必将Kestrel线程计数设置为像1K这样的大值.
更多信息:Is Kestrel using single thread for processing requests like Node.js?
新的Kestrel的Limits属性在ASP.NET Core 2.0 Preview 2中已经是introduced.
You can now add limits for the following:
- Maximum Client Connections
- Maximum Request Body Size
- Maximum Request Body Data Rate
例如:
.UseKestrel(options => { options.Limits.MaxConcurrentConnections = 100; }
IIS
当Kestrel在反向代理后运行时,您可以调整代理本身.例如,您可以在web.config或aspnet.config中配置IIS应用程序池:
<configuration> <system.web> <applicationPool maxConcurrentRequestsPercpu="5000" maxConcurrentThreadsPercpu="0" requestQueueLimit="5000" /> </system.web> </configuration>
当然Nginx和Apache都有自己的并发设置.