如何在 .NET Core Web API 中配置并发?

Posted

技术标签:

【中文标题】如何在 .NET Core Web API 中配置并发?【英文标题】:How to configure concurrency in .NET Core Web API? 【发布时间】:2017-11-07 13:04:35 【问题描述】:

在过去的 WCF 时代,您可以通过 MaxConcurrentCalls 设置控制服务并发。 MaxConcurrentCalls 默认为 16 个并发调用,但您可以根据需要提高或降低该值。

如何在 .NET Core Web API 中控制服务器端并发?在我们的例子中,我们可能需要限制它,因为太多的并发请求会阻碍整体服务器性能。

【问题讨论】:

【参考方案1】:

ASP.NET Core 应用程序并发由其web server 处理。例如:

红隼

var host = new WebHostBuilder()
    .UseKestrel(options => options.ThreadCount = 8)

由于基于 Kestrel 异步实现,不建议将 Kestrel 线程数设置为像 1K 这样的大值。

更多信息:Is Kestrel using a single thread for processing requests like Node.js?

在 ASP.NET Core 2.0 Preview 2 中,新的 Limits 属性为 introduced。

您现在可以为以下内容添加限制:

    最大客户端连接数 最大请求正文大小 最大请求正文数据速率

例如:

.UseKestrel(options =>

    options.Limits.MaxConcurrentConnections = 100;

IIS

当 Kestrel 在反向代理后面运行时,您可以调整代理本身。例如,您可以在web.configaspnet.config 中配置IIS 应用程序池:

<configuration>
  <system.web>
    <applicationPool
        maxConcurrentRequestsPerCPU="5000"
        maxConcurrentThreadsPerCPU="0"
        requestQueueLimit="5000" />
  </system.web>
</configuration>

当然 NginxApache 有自己的并发设置。

【讨论】:

如果我将更改添加到 aspnet.config,如何应用它们?重启服务器?重启iis?回收应用池? 有谁知道当请求进来并且服务器已经在运行最大线程数时 Kestrel web 主机的行为是什么?

以上是关于如何在 .NET Core Web API 中配置并发?的主要内容,如果未能解决你的问题,请参考以下文章

我用 Visual Studio 创建了一个 ASP.NET Core Web API,但前端是 Angular。我该如何配置它?

支持多个版本的ASP.NET Core Web API

即使在配置 ASP.NET Core Web API 中启用了 CORS,CORS 也会阻止发布请求

.NET Core Web API使用依赖注入(DI)进行服务配置一

如何将 .net core Web API 项目添加到现有的 .NET core (3.1) Web Application 项目中?

如何在 ASP.NET Core Web API 中发布对象列表