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 이벤트가 먼저 실행되는 경우가 발생해서 그런 것 같네요.
'인터넷/IT > 프로그래밍' 카테고리의 다른 글
InnoSetup 사용 시 설치전 모든 페이지를 스킵 시 wpReady가 보이는 문제점 (0) | 2014.03.08 |
---|---|
jvcl - TJvXPMenuItemPainter 에 짜증나는 버그 (0) | 2014.03.07 |
class EIcsLibeayException with message Unable to load LIBEAY32.DLL (0) | 2014.02.21 |
OpenSSL 빌드하기 ( Visual Studio 2010 ) 또는 libeay32.dll, ssleay32.dll 다운로드 (1) | 2014.02.21 |
SignTool Error: No certificates were found that met all the given criteria. (0) | 2014.02.19 |
IE9 이상으로 브라우저를 업그레이드하거나, 크롬, 파이어폭스 등 최신 브라우저를 이용해주세요.