You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#:如何提升HttpWebRequest的并发连接数?

解决多线程HttpRequest客户端连接数受限的问题

我之前在做类似的多线程HTTP请求工具时也踩过这个坑,明明设置了连接数限制但就是不生效,折腾了好一阵才找到几个关键的排查点,你可以逐一试试:

1. 确认ServicePointManager.DefaultConnectionLimit的设置时机

这个设置必须在第一个HTTP请求发出之前执行,否则.NET会为目标域名创建默认的ServicePoint实例,后续修改全局的DefaultConnectionLimit不会影响已经存在的ServicePoint。比如在控制台应用里,要把它放在Main方法的最开头:

static void Main(string[] args)
{
    // 先设置全局连接限制
    ServicePointManager.DefaultConnectionLimit = 100;
    // 再初始化你的多线程请求逻辑
    StartMultiThreadRequests();
}

2. 手动指定目标域名的ServicePoint连接数

如果你的请求都是指向同一个域名,直接针对该域名的ServicePoint单独设置连接数会更可靠,避免全局设置被覆盖:

Uri targetDomain = new Uri("https://your-target-website.com");
ServicePoint servicePoint = ServicePointManager.FindServicePoint(targetDomain);
// 强制设置该域名的最大连接数
servicePoint.ConnectionLimit = 100;

每个域名对应一个ServicePoint实例,它的连接数优先级高于全局的DefaultConnectionLimit,所以直接修改它能确保生效。

3. 检查请求的超时时间设置

有时候不是连接数不够,而是请求的Timeout设置太短,导致排队的请求还没轮到就超时了。可以把超时时间调大试试:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetUrl);
// 设置为60秒(根据实际场景调整,比如文件下载可能需要更长时间)
request.Timeout = 60000;

4. 验证配置文件的正确性

如果用配置文件设置,要确保配置节放在<configuration>根节点下,并且文件名正确(控制台应用应为YourAppName.exe.config,Web应用是web.config):

<configuration>
  <system.net>
    <connectionManagement>
      <!-- 注意属性名是maxconnection(全小写) -->
      <add address="*" maxconnection="100" />
    </connectionManagement>
  </system.net>
</configuration>

如果配置文件格式错误或者路径不对,.NET会忽略这些设置,回到默认的连接数限制。

5. 排除目标服务器的限制

有些网站会对单个IP的并发请求数做限制,即使你这边放开了连接数,对方服务器也会拒绝多余的请求,表现为超时。可以用curl或者Postman同时发起多个请求测试,如果同样出现失败,那大概率是服务器端的限制,这时候需要调整请求频率或者使用代理IP。

内容的提问来源于stack exchange,提问作者Abdul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:32:04