Тайм-аут мыла Delphi?
Я иногда получаю тайм-ауты 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)));
Как установить время ожидания соединения?
JD
2 ответа:
Что мне пришлось сделать, так это использовать обработчик 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