【发布时间】:2010-10-12 09:32:52
【问题描述】:
我偶尔会遇到 SOAP 超时,我确信是连接超时导致了问题。 30 秒后,我总是会暂停。通过谷歌搜索,我发现 InternetSetOption 的建议可用于设置超时,但是在我的机器上,我有 SOAPHttpTrans.pas (CodeGear Delphi 7),它具有以下代码:
Request := HttpOpenRequest(FInetConnect, 'POST', PChar(FURLSite), nil,
nil, nil, Flags, 0{Integer(Self)});
Check(not Assigned(Request));
{ Timeouts }
if FConnectTimeout > 0 then
Check(not InternetSetOption(Request, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@FConnectTimeout), SizeOf(FConnectTimeout)));
if FSendTimeout > 0 then
Check(not InternetSetOption(Request, INTERNET_OPTION_SEND_TIMEOUT, Pointer(@FSendTimeout), SizeOf(FSendTimeout)));
if FReceiveTimeout > 0 then
Check(not InternetSetOption(Request, INTERNET_OPTION_RECEIVE_TIMEOUT, Pointer(@FReceiveTimeout), SizeOf(FReceiveTimeout)));
如何设置连接超时?
京东
【问题讨论】:
-
在我的代码中我设置了 RIO.HTTPWebNode.ConnectTimeout := 300000; // 5 分钟; RIO.HTTPWebNode.SendTimeout := 300000; RIO.HTTPWebNode.ReceiveTimeout := 1200000; // 20 分钟。我确定是连接超时没有被应用。
-
您是否调试过这些行以查看 InternetSetOptions 是否实际上是使用正确的超时值调用的?您使用 InternetQueryOption 验证过实际超时值了吗?
-
@SimaWB 它有相似之处,是的。不过,这不是一个完整的副本。在这种情况下,可能是服务器也有超时。如果服务器是带有 ASP.NET 代码的 IIS,那么您可能还想检查服务器代码,检查那里设置的可能的超时值。 (在配置文件中,检查 /configuration/system.web/httpRuntime/@executionTimeout)
-
感谢大家的帮助。
标签: delphi