안녕하세요.. 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"이라고 뜹니다.
계속 여기서 막혀서 진행이 되지 않네요. 도움 부탁드립니다.
|