JD.*_*JD. 6 delphi soap web-services network-programming
我有一个发出SOAP请求的客户端应用程序.我已将超时设置为20分钟.但是,有时我会看到10秒后发生超时错误.我在代码中有以下内容:
RIO.HTTPWebNode.ReceiveTimeout := 1200000
Run Code Online (Sandbox Code Playgroud)
我需要设置ConnectTimeout和SendTimeOut吗?目前它们被设置为默认值0.这些设置有什么区别?
我正在使用Delphi 2007.
进一步查看错误消息,我看到我得到"操作超时......".所以我应该将我设置ReceiveTimeOut为零,因为我真的不想要任何超时?
CodeGear的SOAPHTTPTrans实现设置全局超时,而不是每个会话.以下是相关代码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)));
Run Code Online (Sandbox Code Playgroud)
我必须做的是使用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;
Run Code Online (Sandbox Code Playgroud)
有关这些选项的MSDN文档,请访问http://msdn.microsoft.com/en-us/library/aa385328%28VS.85%29.aspx
| 归档时间: |
|
| 查看次数: |
6869 次 |
| 最近记录: |