首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制.net内核中的并发请求

问限制.net内核中的并发请求
EN

Stack Overflow用户
提问于 2021-01-12 08:41:07
回答 2查看 7.7K关注 0票数 1

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

为此,我修改了program.cs类,如下所示

代码语言:javascript
复制
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个线程,我从所有线程获得响应--调用。我已经部署的API -在本地IIS pc中发布了它。

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

我的密码怎么了?

编辑我读过本文如何在.NET核心Web中配置并发性?,问题是当我添加web.config时

代码语言:javascript
复制
 <configuration>
    <system.web>
        <applicationPool
            maxConcurrentRequestsPerCPU="5000"
            maxConcurrentThreadsPerCPU="0"
            requestQueueLimit="5000" />
    </system.web>
</configuration>

我有个警告

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

我不能在iis上发布api,也不能在iis express上运行api。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-14 07:59:00

因为API将驻留在IIS中,所以不会使用Kestrel的配置。

若要在IIS中设置最大并发连接,可以打开IIS管理器窗口。从服务器节点中选择站点。然后,从操作窗格中选择预置设置。您可以在“行为”部分下看到“限制”。根据需要设置最大并发连接值。如下所示:

​

​

备注此设置适用于所有站点。

此外,您还可以检查这个样本并创建一个自定义中间件来限制请求。

票数 4
EN

Stack Overflow用户

发布于 2022-06-25 12:31:12

选项serverOptions.Limits.MaxConcurrentConnections限制到Kestrel的最大tcp连接数,而不是并发http请求的数目。通过每个tcp连接,仍然可能存在多个并发http请求。这就是为什么您在测试中看不到任何错误,即使有两个以上的并发http请求。

为了限制.NET Core (或.NET 5+)中并发http请求的数量,可以使用ConcurrencyLimiterMiddleware (package Microsoft.AspNetCore.ConcurrencyLimiter)。下面是一个示例:

代码语言:javascript
复制
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddStackPolicy(options =>
        {
            options.MaxConcurrentRequests = 2;
            options.RequestQueueLimit = 25;
        });
    }

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        app.UseConcurrencyLimiter();
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65680484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档