c# - 限制 .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 中运行它
解决方案
由于 API 将托管在 IIS 中,因此不会使用 Kestrel 的配置。
要在 IIS 中设置最大并发连接数,您可以打开 IIS 管理器窗口。从服务器节点中选择站点。然后,从操作窗格中选择高级设置。您可以在“行为”部分下看到“限制”。根据您的要求设置最大并发连接值。像这样:
[注意] 此设置适用于所有站点。
此外,您还可以查看此示例并创建自定义中间件来限制请求。
推荐阅读
- python - Python 寻找“钥匙”
- python - 移动 csv 时间序列以具有相似的起始位置并在必要时删除数据点
- python - 如何将列表中的内容从一个函数附加到另一个函数
- python - 多处理以在熊猫数据框中添加一列
- excel - 将特定日期和主题的表格从 Outlook 复制到 Excel
- python - 如何使用 Python 脚本自动化 SAS 企业指南报告?
- flutter - Flutter Firestore QuerySnapshot 与 uid
- sql - 在选择不同的行时统一来自不同表的列
- node.js - 有没有办法通过 api 输出在脚本中重命名“范围”“majorDimension”“值”以获取更清晰的数据?
- javascript - 如何创建一个 IP Grabber,其中用户的 IP 只出现一次?