web-services - Delphi SOAP 客户端不能保持超过 2 个并发请求。如何增加?

标签 web-services delphi soap delphi-xe2 com+

我有一个多用户 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/

相关文章:

c# - 通过 C# Web Service 获取更新的 APK 版本并安装

java - 通过 Web 服务可以传输的最大数据量是多少?

delphi - 修改exe资源中的字符串

c# - 使用soap客户端时出现InvalidOperationException

java - 使用 jsonbody 请求将 JSON 转换为 string/int

c# - WSDL 与 Windows Phone 8 兼容吗?

delphi - 对于大字符串,TSQLQuery 仅正确传输前 1MB 数据

Delphi 2009从字符串中读取oem而无需setCodePage

java - CXF-CODEGEN 生成的客户端需要 soap 信封上的命名空间

xml - Cvc-elt.1 : Cannot Find The Declaration Of Element 'soap:Envelope'