首页 > 解决方案 > 限制 .net core 中的并发请求

问题描述

我正在尝试配置我的 .net 核心 API 以限制请求。

为了实现这一点,我修改了 program.cs 类,如

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();            
    }


    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureKestrel(serverOptions =>
                {
                    serverOptions.Limits.MaxConcurrentConnections = 2;
                })
                //.UseContentRoot(Directory.GetCurrentDirectory())
                //.UseIISIntegration()
                .UseStartup<Startup>();
            });
}

但问题是,当我使用控制台应用程序调用我的 API 时,使用的线程数超过 2,我得到了来自所有线程调用的响应。我在本地 IIS pc 中部署的 API 发布了它。

我认为我必须只得到 2 个响应,然后对于其他呼叫,我将得到 503 服务不可用。

我的代码有什么问题?

编辑 我已阅读这篇文章如何在 .NET Core Web API 中配置并发?,问题是当我添加 web.config

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

我有警告

元素系统。web 具有无效的子元素应用程序池

我无法在 iis 上发布 api 或在 iis express 中运行它

标签: c#asp.net-core.net-core

解决方案


由于 API 将托管在 IIS 中,因此不会使用 Kestrel 的配置。

要在 IIS 中设置最大并发连接数,您可以打开 IIS 管理器窗口。从服务器节点中选择站点。然后,从操作窗格中选择高级设置。您可以在“行为”部分下看到“限制”。根据您的要求设置最大并发连接值。像这样:

在此处输入图像描述

[注意] 此设置适用于所有站点。

此外,您还可以查看此示例并创建自定义中间件来限制请求。


推荐阅读