gpt4 book ai didi

web-services - Delphi 中的 Web 服务超时错误

转载 作者:行者123 更新时间:2023-12-03 14:59:49 25 4
gpt4 key购买 nike

我有一个发出 SOAP 请求的客户端应用程序。我已将超时设置为 20 分钟。但是,有时我会看到 10 秒后发生超时错误。我的代码如下:

RIO.HTTPWebNode.ReceiveTimeout := 1200000

我需要设置ConnectTimeoutSendTimeOut吗?目前它们被设置为默认值 0。设置这些会产生什么区别?

我使用的是 Delphi 2007。

进一步查看错误消息,我看到“操作超时......”。那么我是否应该将 ReceiveTimeOut 设置为零,因为我真的根本不希望任何超时?

最佳答案

CodeGear 的 SOAPHTTPTrans 实现全局设置超时,而不是每个 session 。以下是来自 THTTPReqResp.Send 的相关代码:

{ Timeouts }
if FConnectTimeout > 0 then
Check(not InternetSetOption({Request}nil, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@FConnectTimeout), SizeOf(FConnectTimeout)));
if FSendTimeout > 0 then
Check(not InternetSetOption({Request}nil, INTERNET_OPTION_SEND_TIMEOUT, Pointer(@FSendTimeout), SizeOf(FSendTimeout)));
if FReceiveTimeout > 0 then
Check(not InternetSetOption({Request}nil, INTERNET_OPTION_RECEIVE_TIMEOUT, Pointer(@FReceiveTimeout), SizeOf(FReceiveTimeout)));

我必须做的是使用 OnBeforePost 处理程序来设置超时:

transport.OnBeforePost := configureHttpRequest;

procedure Tsomething.configureHttpRequest(const HTTPReqResp: THTTPReqResp; Data: Pointer);
begin
InternetSetOption(Data, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@FconnectTimeoutMS), SizeOf(FconnectTimeoutMS));
InternetSetOption(Data, INTERNET_OPTION_SEND_TIMEOUT, Pointer(@FsendTimeoutMS), SizeOf(FsendTimeoutMS));
InternetSetOption(Data, INTERNET_OPTION_RECEIVE_TIMEOUT, Pointer(@FreceiveTimeoutMS), SizeOf(FreceiveTimeoutMS));
end;

这些选项的 MSDN 文档位于 http://msdn.microsoft.com/en-us/library/aa385328%28VS.85%29.aspx

关于web-services - Delphi 中的 Web 服务超时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2898261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com