dim*_*its 1 c# .net-core asp.net-core
我正在尝试配置我的 .net core 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>();
});
}
Run Code Online (Sandbox Code Playgroud)
但问题是,当我使用超过 2 个线程的控制台应用程序调用 API 时,我会收到所有线程调用的响应。我已经在本地 IIS 电脑上部署-发布了 API。
我认为我必须只得到 2 个响应,然后对于其他呼叫我将得到 503 服务不可用。
我的代码有什么问题吗?
编辑 我已阅读这篇文章How to configure concurrency in .NET Core Web API? ,问题是当我添加 web.config 时
<configuration>
<system.web>
<applicationPool
maxConcurrentRequestsPerCPU="5000"
maxConcurrentThreadsPerCPU="0"
requestQueueLimit="5000" />
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我有警告
元素系统。web 具有无效的子元素 applicationpool
我无法在 iis 上发布 api 或在 iis Express 中运行它
选项serverOptions.Limits.MaxConcurrentConnections限制与 Kestrel 的最大 tcp 连接数,而不是并发 http 请求数。通过每个 tcp 连接,仍然可能有多个并发的 http 请求。这就是为什么在您的测试中,即使有超过 2 个并发 http 请求,您也看不到任何错误。
为了限制.NET Core(或.NET 5+)中并发http请求的数量,可以使用ConcurrencyLimiterMiddleware(包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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15158 次 |
| 最近记录: |