SSIS Web Service Task连接池耗尽问题求助:如何调整最大池大小?
解决SSIS Web Service Task连接池耗尽的问题
我之前帮好几个朋友排查过SSIS里循环调用Web服务导致的连接池问题,这个报错all pooled connections were in use and max pool size was reached本质就是HTTP连接池里的可用连接被耗尽了,咱们从几个方向来解决:
1. 直接调整HTTP连接管理器的池大小
SSIS的HTTP连接管理器默认连接池大小是100,如果你的循环次数多、调用频率高,很容易打满。你可以这样改:
- 找到你的HTTP连接管理器,右键点击→属性
- 在
ConnectionString属性的末尾加上;Max Pool Size=200(数值可以根据你的循环量调整,比如300或更高,别太夸张就行) - 保存后重新运行任务,看看是否还会报错
2. 手动释放闲置连接(加个脚本任务)
有时候Web Service Task调用后,连接不会立刻回到池里,尤其是短时间内大量循环的时候。你可以在每次Web Service Task执行完后,加一个Script Task,用代码强制释放闲置连接:
- 脚本任务里选择C#语言,在
Main方法里加这段代码:
// 替换成你的HTTP连接的URL变量,或者直接写URL字符串 Uri serviceUri = new Uri(Dts.Variables["User::WebServiceURL"].Value.ToString()); System.Net.ServicePointManager.FindServicePoint(serviceUri).CloseConnectionGroup(""); Dts.TaskResult = (int)ScriptResults.Success;
这段代码会找到对应服务点的连接组,释放所有闲置的连接,给后续循环腾出空间。
3. 给循环加个延迟,让连接池喘口气
如果你的循环跑太快,比如每秒调用好几次,连接池来不及回收闲置连接。可以在Web Service Task之后加一个Delay Task,设置延迟1-2秒(根据实际情况调整),给连接池足够的时间把用完的连接放回池里。
4. 改用Script Task手动控制Web服务调用(更灵活)
如果你觉得Web Service Task的连接管理太死板,可以直接用Script Task来调用SOAP服务,这样能完全掌控连接的生命周期:
- 先给SSIS项目添加Web服务的引用(右键项目→添加服务引用)
- 在Script Task里写类似这样的代码:
using (var serviceProxy = new YourWebServiceNamespace.YourServiceSoapClient()) { // 调用你的Web方法,传入参数 var result = serviceProxy.YourDataPullMethod(yearParam, monthParam); // 处理结果写入数据库的逻辑 }
using语句会在代码块结束后自动释放服务代理对象,把连接还给池,从根源上避免连接泄漏。
5. 排查服务端的连接限制
有时候问题不在SSIS这边,而是Web服务端本身设置了最大连接数限制。可以联系服务端的管理员,确认他们是否限制了每个客户端的连接数,或者是否需要调整服务端的连接池设置。
内容的提问来源于stack exchange,提问作者alice
相关产品推荐
相关产品推荐

