인터넷/IT/프로그래밍

Overbytes ics 의 THttpCli 컴포넌트 사용 시 주의점

coffee94 2014. 3. 5. 20:31

THttpCli 클래스 사용 시 GetASync 메소드를 이용하여 비동기 통신할 경우 


아래와 같은 이벤트 발생 시.. 다음과 같이

procedure TForm1.HttpCli1RequestDone(Sender: TObject; RqType: THttpRequest;
  ErrCode: Word);
begin

  .................

  HttpCli1.GetASync

  ................
end;


GetASync 메소드를 다시 호출할 경우 매우 낮은 확률로 요청이 실패할 수 있습니다.

요청이 실패할 경우 발생하는 ErrCode는 httperrNoStatusCode 입니다.


따라서 PostMessage 로 메세지 큐에 넣어서 요청하던지 아니면 해당 이벤트서 바로 비동기 요청을 시도하려면..

다음과 같이 소켓을 닫고 비동기 요청을 해야 합니다.


procedure TForm1.HttpCli1RequestDone(Sender: TObject; RqType: THttpRequest;
  ErrCode: Word);
begin
....................
 HttpCli1.CtrlSocket.Close;
 HttpCli1.GetASync;
....................
end;


발생하는 확률이 1000번 요청 시 한 두번 발생하는 상황이라서 정확한 원인을 파악하기는 힘들지만 내부적으로 GetASync 요청이 완료되어 Http 데이터를 모두 받은 후에 소켓을 닫는 메세지를 큐잉해서 실행하게 되는데 이 메세지보다 RequestDone 이벤트가 먼저 실행되는 경우가 발생해서 그런 것 같네요.