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

Dotnet Core自包含(Self-contained)部署调用WCF Soap服务性能极低求助

问题根因
  • WCF客户端(svcutil 2.0.2生成的调用骨架)默认单端点最大并发连接数仅为2,高并发下会触发连接排队,导致请求阻塞
  • .NET Core独立部署时默认线程池最小线程数等于服务器CPU核数,突发50并发时线程池创建新线程速率仅为每秒1-2个,无法及时处理请求,出现你观测到的不断创建新线程的现象
  • IIS托管时AspNetCoreModule会自动根据服务器配置调优线程池最小线程数、请求队列长度,因此不会触发该问题
  • 数据库调用无异常是因为数据库客户端默认连接池配置足够,且异步IO不会长时间占用工作线程,不会触发线程池饥饿
解决方案

1. 调整WCF客户端连接限制

修改SOAP客户端初始化代码,放开单端点最大连接限制,同步调整全局HTTP连接限制:

var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport) // 按你的实际安全模式调整
{
    MaxConnections = 200, // 按压测并发量的2-4倍设置
    MaxReceivedMessageSize = int.MaxValue,
    SendTimeout = TimeSpan.FromSeconds(30),
    ReceiveTimeout = TimeSpan.FromSeconds(30)
};
var endpoint = new EndpointAddress("你的SOAP服务地址");
var soapClient = new YourGeneratedSoapClient(binding, endpoint);

// 全局HTTP连接限制同步调整
System.Net.ServicePointManager.DefaultConnectionLimit = 200;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

2. 手动调整线程池最小线程数

在Program.cs入口最顶部添加线程池配置,该配置必须放在所有业务逻辑初始化之前才能生效:

// 第一个参数为最小工作线程数,第二个为最小IO完成端口线程数,按压测并发量的2倍设置即可
ThreadPool.SetMinThreads(100, 100);

3. 优化SOAP客户端实例生命周期

不要每次请求都新建SOAP客户端实例,避免重复初始化信道、建立连接的开销,推荐用单例注入或者对象池管理:

// Program.cs 中注册单例SOAP客户端
builder.Services.AddSingleton<YourGeneratedSoapClient>(sp =>
{
    // 此处放上面的绑定和初始化逻辑
    var binding = new BasicHttpBinding{ MaxConnections = 200 };
    var endpoint = new EndpointAddress("你的SOAP服务地址");
    return new YourGeneratedSoapClient(binding, endpoint);
});

如果并发量超过200,可以使用Microsoft.Extensions.ObjectPool库实现SOAP客户端对象池,避免单例实例的锁竞争问题。

4. 调整Kestrel并发限制

可选配置,高并发场景下放开Kestrel的连接限制:

builder.WebHost.ConfigureKestrel(opt =>
{
    opt.Limits.MaxConcurrentConnections = 1000;
    opt.Limits.MaxConcurrentUpgradedConnections = 1000;
});
验证方式

调整完成后重新进行50并发压测,观测以下指标:

  • 应用线程数稳定在设置的最小线程数附近,不会出现持续暴涨的情况
  • SOAP请求响应延迟恢复到正常水平,没有排队阻塞现象
  • 没有连接超时、服务端点不可达类的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:03