我正在尝试配置我的.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个线程,我从所有线程获得响应--调用。我已经部署的API -在本地IIS pc中发布了它。
我认为我必须只有2个响应,然后,对于其他电话,我将得到503服务不可用。
我的密码怎么了?
编辑我读过本文如何在.NET核心Web中配置并发性?,问题是当我添加web.config时
<configuration>
<system.web>
<applicationPool
maxConcurrentRequestsPerCPU="5000"
maxConcurrentThreadsPerCPU="0"
requestQueueLimit="5000" />
</system.web>
</configuration>我有个警告
元素系统。web具有无效的子元素应用程序池
我不能在iis上发布api,也不能在iis express上运行api。
发布于 2021-01-14 07:59:00
因为API将驻留在IIS中,所以不会使用Kestrel的配置。
若要在IIS中设置最大并发连接,可以打开IIS管理器窗口。从服务器节点中选择站点。然后,从操作窗格中选择预置设置。您可以在“行为”部分下看到“限制”。根据需要设置最大并发连接值。如下所示:

备注此设置适用于所有站点。
此外,您还可以检查这个样本并创建一个自定义中间件来限制请求。
发布于 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)。下面是一个示例:
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();
}
}https://stackoverflow.com/questions/65680484
复制相似问题