c# - .net core 应用程序中 ServicePointManager.DefaultConnectionLimit 的最高安全数是多少?

标签 c# asp.net-core .net-core

我有一个 .net core api,必须进行大约 150,000 次调用才能从外部服务收集数据。我使用 Parallel.forEach 并行运行这些请求,这似乎工作得很好,但是我从 http 客户端收到了大约 100,000 个请求的错误!

The Operation was canceled

回想起来,我希望我也记录了异常类型,但我相信这是由于没有足够的传出连接限制。

通过调试我发现返回2:

ServicePointManager.DefaultConnectionLimit

从表面上看,如果这确实是外部域/服务器允许的最大打开连接数,我想尽可能增加它。理想情况下为 150,000,以确保并行处理不会导致问题。

问题是我找不到任何关于安全限制是什么的信息,或者这会给我的机器带来多少负载——如果负载很大的话。由于这个问题导致发出真正的请求,我的数据提供商将其计入我的费用中 - 但显然我没有从中得到任何东西,因为 .net core 框架只是丢弃了我的结果..

由于这个问题也是间歇性的,因此可能很难调试,我只想将此值设置为在本地计算机上安全的尽可能高的值。

我相信这个问题与 stackoverflow 相关,因为它确实直接处理上面的技术问题,而我能找到的其他问题只询问有关此设置的详细信息。

最佳答案

据我了解,您正在尝试向外部服务发出 150000 个模拟请求。我认为您的服务是 Restful Web 服务。如果出现这种情况,当您将 DefaultConnectionLimit 设置为任意数字(非常高)时,每个请求都会打开一个端口来请求数据。这肯定会阻塞您的网络和端口(端口范围是 0 到 65535)。

此外,在不使用限制的情况下发出 150000 个请求会不受控制地消耗您的操作系统资源。

DefaultConnectionLimit 的存在是因为它可以保护您免受上述问题的影响。

您可以考虑使用SemaphoreSlim进行限制

关于c# - .net core 应用程序中 ServicePointManager.DefaultConnectionLimit 的最高安全数是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738249/

相关文章:

c# - Sitecore 项目字段值空

c# - 如何使用 C# 在 windows-ce 中获取我的程序名称?

c# - 使用 System.Web.Optimization 捆绑,如何访问构建捆绑的结果?

c# - 工厂的依赖注入(inject)生命周期

c# - SQL连接到数据库重复

c# - EF Core - 创建没有连接字符串的迁移

c# - 如何在 Controller 中使用多个 DBContext

filter - 如何为事务管理编写自定义过滤器

c# - LINQ 中按日期差异排序

C#6 字符串插值 + 短格式字符串错误?