Overbytes ics 의 THttpCli 컴포넌트 사용 시 주의점
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 이벤트가 먼저 실행되는 경우가 발생해서 그런 것 같네요.