자답입니다. 크흐흐흐... (웃는 건지 우는 건지 저도 잘 모르겠지만)
영문 사이트에서 답을 찾았습니다. ----- 아래 내용입니다.
Steven Kamradt said - "I was experiencing this exact error (the -2147417842 error) with the exact symptoms. Reversing the order from
ISAPIThreadPool,
ISAPIApp
to
ISAPIApp,
ISAPIThreadPool
이렇게 해 보니 일단 해결은 됐네요. 좀 더 여러 가지 더 해 봐야 알겠지만, 일단 'html.. xml.. 어쩌고 하는 문제는 해결됐습니다. 며칠 째 고민하다 여기 글 쓰고나서 인터넷 들어가서 뒤지니 바로 찾아지네요. 같은 고민하시는 분들 계시면 참조하시길...
다만 이게 다는 아니고 어떤 사람은 Delphi 의 source 프로그램 자체를 수정해야 한다는 내용도 있군요.
그대로 소개하면,
1. library path에 $(DELPHI)\Source\Soap 추가
2. \Source\Soap\SoapHTTPTrans.pas 를 열고, backup 하기
3. Line 13 에 //{$DEFINE USE_INDY} 라고 되어 있어야 하고,
4. 이를 uncomment, 즉 앞의 // 를 제거하고 {$DEFINE USE_INDY} 하라고 합니다.
5. 그런 다음 client 프로그램을 "Rebuild" 해야 한다고 하네요 (Run 버튼 클릭은 안된다고)
요 글 위에 이게 무서우면 읽지 말라는 말도 빼놓지 않았습니다. 그런데 이게 posting 된 게 2002 년인데, 2009 년에 Delphi 2006 으로 해도 같은 에러가 난다는 post 도 하나 있습니다.
브리오 님이 쓰신 글 :
: 안녕하세요.. DataSnap Soap 서버를 작성하다 진행이 되지 않아서 올립니다.
:
: Delphi 7 사용하고 있구요,
:
: ==== 서버 사이드
: 1) New application 을 만듭니다 --- New>Others>Web services tab>SOAP SERVER APPLICATION 으로 해서, 새로운 project 를 하나 생성하고,
: 2) 여기에 SOAP Data Module 추가합니다. (역시 New>Others>Web services tab>Soap Data Module 을 추가해서, 기 존 프로젝트에 unit 하나가 추가되죠). Interface 이름을 IDataMod라고 가정합니다. 이 data module 에 dataset (Interbase 하고 dbExpress 에 있는 것 다 해 봤습니다)하고, Dataset provider 를 추가합니다. DataSet에 query 문 같은 것을 지정합니다.
:
: === 클라이언트
: 3) Client 프로그램 만듭니다. 보통 project 파일 하나 만들고 여기에 SoapConnection 을 하나 추가하고, ClientDataset 하나 추가합니다.
: 4) WSDL Importer 를 사용해서 서버의 Interface 를 받아오려 합니다. ...
:
: 자, 여기서
:
: 1. 위의 4) 번 단계에서 난감한 에러가 발생합니다. 우선
: IDataMod = interface
: [GUID....]
: end;
:
: 까지가 자동 생성되죠. 여기서 위의 4)번 Import 를 시도하면 에러가 납니다 .
:
: 그래서 임의로 method 를 하나 추가합니다.
:
: IDataMod = interface
: [GUID....]
:
: function DefaultAction : boolean; stdcall;
: end;
:
: 물론 아래의 TDataMod.. 에서도 정의하고 implementation 부분에서도 작성합니다.
:
: 이렇게 하면 에러가 발생하지 않습니다. 그런데 여기에 method 를 하나 이상 추가하면 또 에러가 납니다.
:
: 또 이 경우, 하나의 method 만 정의하여 제대로 받아두고, client 프로그램에서 수동으로 추가해 주고 (당연히
: 서버측에도 똑같이 추가하고) 컴파일 해서 실행하면 상관없이 수행됩니다.
:
:
: 2. 일단 위 단계는 method 하나만 정의를 하고 진행해 봤습니다.
:
: 대충 틀을 짠 다음, 클라이언트에서 clientdataset1.Open 이라는 명령을 줍니다. 그런데,
:
: 1) 위 서버를 CGI 프로그램, 즉 .exe 파일로 만든 경우에는 에러없이 작동합니다.
: 2) 그런데 DLL로 compile 하면 에러가 발생합니다. 에러 메시지는,
:
: "Received content of Invalid Content-Type setting:text/html - SOAP expects text/xml"이라고 뜹니다.
:
:
: 계속 여기서 막혀서 진행이 되지 않네요. 도움 부탁드립니다.
|