我有一个多用户 COM+ 应用程序,需要在 SOAP WebServices 上发出多个请求。每个 SOAP 请求可能持续 10 到 60 秒(这不受我的控制)。问题是,我永远不能同时提出超过 2 个请求。
例如,当我有 3 个并发请求时,第三个请求仅在第二个请求完成时才开始。 我在控制台应用程序上观察到相同的行为(出于测试目的),向同一个 WebService 发出多个并发请求,并且我再次被限制为 2 个请求。
当我尝试使用另一种语言 (C#) 使用相同的 WebServices 时,发生了同样的情况,但是,在 C# 客户端上有一个属性可以解决该问题:
System.Net.ServicePointManager.DefaultConnectionLimit
当我增加该属性时,我可以保留我想要的任意数量的并发请求。 Delphi 上有类似的属性吗?
我正在使用 WSDL 导入器工具来使用 Web 服务 (Delphi XE2)。
最佳答案
Delphi 使用 Wininet.dll 发出 SOAP 请求,IE 使用相同的 DLL。 这个限制其实是documented .
你有两个选择:
- 按照知识库文章中所述调整注册表
- 在 SOAP 调用之前使用
InternetSetOption
:
小代码示例(请注意,它不包括错误检查):
Const
INTERNET_OPTION_MAX_CONNS_PER_SERVER = 73;
INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER = 74;
var
MaxConnections : Integer;
begin
MaxConnections := 10; // adapt to your needs
InternetSetOption(Nil, INTERNET_OPTION_MAX_CONNS_PER_SERVER, @MaxConnections , SizeOf(MaxConnections ));
InternetSetOption(Nil, INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER, @MaxConnections , SizeOf(MaxConnections ));
// do SOAP call
end;
关于web-services - Delphi SOAP 客户端不能保持超过 2 个并发请求。如何增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936375/