sexta-feira, abril 06, 2012

TimeOut TSoapConnection

Salve,

Essa semana enfrentei um sério transtorno com erro de TimeOut em um Webservice consumido via SoapConnection. Depois pesquisar bastante descobri que o tempo de retorno de um Webservice é algo definido pelo Windows, e que a atualização do Internet Explorer pode alterar tal configuração. A boa notícia é que dá pra configurar isso via Delphi, invocando uma procedure disponível na unit WinInet. Bom chega de prosa e vamos à solução!

No componente TSoapConnection, procure pelo evento OnBeforeExecute, e codifique-o conforme exemplo abaixo:


procedure TForm1.soapConnBeforeExecute(
  const MethodName: String; var SOAPRequest: WideString);
  var timeOut: Integer;
begin
  timeOut := 360000;
  InternetSetOption(nil, INTERNET_OPTION_RECEIVE_TIMEOUT, pointer(@timeOut), sizeof(timeOut));
end;


Não se esqueça de adicionar na cláusula Uses a unit WinInet.

Té+

Um comentário:

Unknown disse...

Crie uma procedure no formulário onde tem o TSOAPConnection, assim:

procedure TDtmGenerico.HTTPRIO1BeforeExecute(const MethodName: string;
SOAPRequest: TStream);
begin
SoapConnection1.RIO.HTTPWebNode.ConnectTimeout := 300000;
SoapConnection1.RIO.HTTPWebNode.ReceiveTimeout := 300000;
end;

No OnCreate do DataModulo Cliente, crie o segunte comando:

procedure TDtmGenerico.DataModuleCreate(Sender: TObject);
begin
SoapConnection1.RIO.OnBeforeExecute := HTTPRIO1BeforeExecute;
end;