【问题标题】:Soap Delphi Client end with a timeout for a 1MB callSoap Delphi 客户端以 1MB 调用超时结束
【发布时间】:2011-02-08 21:27:10
【问题描述】:

我们正在开发一个 SOAP 网络服务 (Apache/PHP)。对于小规模调用,所有这些都运行良好,但是对于 1Mb 的肥皂调用(HTTPS 调用大小为 1MB),我们的 Delphi Soap 客户端在除一台以外的所有 PC 上超时停止,我们的 PHP 客户端在 default_socket_timeout=300 时运行良好,但停止带有 default_socket_timeout=60 的“错误获取 http 标头”。

我们如何更改 Delphi 的超时时间?事实上,这个超时似乎是在 Windows XP 网络库中(soaphttptrans.pas 调用的 wininet.dll)

谢谢
塞德里克

【问题讨论】:

    标签: delphi soap client wininet


    【解决方案1】:

    SOAPHttpTrans 中有一个 MaxSinglePostSize。我似乎记得有问题。这不是一个限制,但如果您超过或低于该限制,它的行为会有所不同(分成块发送)。 (默认情况下基本上是 32768)。由于宽弦,如果您使用 D2009/D2010,我希望您会尽快达到该尺寸。看看你是否在这个尺寸附近遇到麻烦会很有趣。您可以使用 Fiddler 捕获一些输出(或挂钩到 OnBeforePost 事件并自己将序列化的 XML 转储到文件中)并查看是否是您遇到问题的地方,而不是之前观察到的 1MB。

    但无论如何,THTTPReqResp 类有 SendTimeout 和 ReceiveTimeout 的选项。尝试调整这些。

    另外...如果您使用的是 Delphi2007 之前的 Delphi,您应该更新您的肥皂库。某处有下载...许多错误修复,包括一个令人讨厌的内存问题,这将导致您的应用程序被 DEP 停止。

    【讨论】:

    • 要考虑的另一件事....尝试通过 SoapUI 运行有效负载。 SoapUI 使用不同的通信堆栈(基于 Java)而不是 WinInet。如果您有相同的结果,您知道这可能是服务器出了问题,或者是防火墙、代理、ESB 等中介出了问题。而不是客户端。
    【解决方案2】:

    实际上是IE7安装的问题:它改变了所有的网络超时。

    使用 IE6 的 PC 有 3600 秒超时,IE7 将其更改为 30 秒。 使用 InternetQueryOption() 显示这一点,而 InternetSetOption 有助于改变这一点。

    非常感谢我的同事花了几个小时来寻找这个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多