Soap Delphi客户端以1MB的呼叫超时结束

时间:2010-04-16 15:19:51

标签: delphi soap client wininet

我们正在开发SOAP Web服务(Apache / PHP)。对于小型调用,所有运行都运行良好,但是使用1Mb soap调用(HTTPS调用大小为1MB),我们的Delphi Soap客户端在所有PC上都停止超时,而且我们的PHP客户端运行良好,default_socket_timeout = 300,但是停止使用default_socket_timeout = 60的“错误获取http标头”。

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

感谢
塞德里克

2 个答案:

答案 0 :(得分:5)

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

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

非常感谢我的工作伙伴,他将这个小虫追捕了好几个小时。

答案 1 :(得分:3)

SOAPHttpTrans中有一个MaxSinglePostSize。我似乎记得有这个问题。这不是一个限制,但如果你已经结束或者在这个限制之下,它的行为会有所不同(分成发送块)。 (默认情况下基本上是32768)。如果你因为宽弦而在D2009 / D2010上,我希望你能早点达到这个尺寸。看看你是否遇到那么大的麻烦会很有趣。您可以使用Fiddler捕获一些输出(或挂钩到OnBeforePost事件并自行将序列化的XML转储到文件中)并查看是否存在问题,而不是之前观察到的1MB。

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

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