5

我们正在开发一个 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)

谢谢塞德里克
_

4

2 回答 2

5

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

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

非常感谢我的工作伙伴花了几个小时来寻找这个错误。

于 2010-04-19T10:11:08.413 回答
3

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

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

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

于 2010-04-16T16:01:21.263 回答