Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 限制对.netcore API控制器的请求数_Asp.net_Asp.net Core - Fatal编程技术网

Asp.net 限制对.netcore API控制器的请求数

Asp.net 限制对.netcore API控制器的请求数,asp.net,asp.net-core,Asp.net,Asp.net Core,我有一个应用程序,其中对控制器的请求需要一段时间才能处理。控制器对每个请求启动一个线程,并最终将一些数据返回到数据库。我需要限制可以处理的请求数量。假设我们的限制是100,如果控制器已经在处理100个请求,那么第101个请求将返回503状态,直到至少一个请求完成 我可以使用应用程序范围的静态计数器来记录当前进程的数量,但有更好的方法吗 编辑: 控制器需要一段时间来响应的原因是,控制器调用另一个API,这是一个跨越数TB地球静止数据的大型数据库。即使我能在理论上优化它,我也无法控制它。更糟糕的是,

我有一个应用程序,其中对控制器的请求需要一段时间才能处理。控制器对每个请求启动一个线程,并最终将一些数据返回到数据库。我需要限制可以处理的请求数量。假设我们的限制是100,如果控制器已经在处理100个请求,那么第101个请求将返回503状态,直到至少一个请求完成

我可以使用应用程序范围的静态计数器来记录当前进程的数量,但有更好的方法吗

编辑:


控制器需要一段时间来响应的原因是,控制器调用另一个API,这是一个跨越数TB地球静止数据的大型数据库。即使我能在理论上优化它,我也无法控制它。更糟糕的是,如果并发请求超过10个,第三方API就会超时。我已将传入请求丢弃到servicebus队列。我只需要在我的api控制器上使用一种好方法来保存一个全局计数,记录有多少请求传入,并且在超过设置的请求数时返回503。

对api控制器的请求不应受到限制。一个想法是接受请求并存储需要完成的进程列表(数据库、队列等)

然后在web请求之外创建一些处理此工作的内容,在这里,您可以使用并行处理/多线程等管理一次处理的数量(使用windows服务/工作者角色/Hangfire等)

处理后,您可以通过信号器与页面通信,以获取处理后显示所需的数据或显示状态


这样做的好处是,您可以随时返回页面或刷新并获得某种状态,而无需重新运行整个流程。

是否考虑让流程不需要花费太长时间来处理?这样你就不需要像这样的“黑客”了。不要在ASP.NET(核心)应用程序中产生线程!你搞砸了线程管理。如果请求是CPU密集型的,则在请求线程上运行它。如果是I/O密集型(网络、数据库、文件系统),请使用async/await。对于其他一切(基于cpu的长时间运行的任务),使用后台工作程序(作为单独的应用程序)和消息总线在