본 문서는 gSOAP User Guide[1]를 기반으로 해서 작성하였음.
– gSOAP으로 구현된 WS Provider는 CGI 기반으로 만들어 짐
* 현재 시각을 돌려주는 간단한 Web Service Provider 작성
1. currentTime.h (헤더파일 생성)
// File: currentTime.h
//gsoap ns service name: currentTime
//gsoap ns service namespace: urn:currentTime
//gsoap ns service location: http://www.yourdomain.com/currentTime.cgi
int ns__currentTime(time_t& response);
– 주석에 사용되는 내용은 의미가 있음
– ns뒤에 ‘__’ 두번 한 후 함수 작성
2. currentTime.cpp (실행 코드 작성)
1) object를 사용하지 않을 경우
// File: currentTime.cpp
#include “soapH.h” // include the generated declarations
#include “currentTime.nsmap” // include the XML namespace mappings
int main()
{
// create soap context and serve one CGI-based request:
return soap_serve(soap_new());
}
int ns__currentTime(struct soap *soap, time_t& response)
{
response = time(0);
return SOAP_OK;
}
2) object를 사용하는 경우
// File: currentTime.cpp
#include “soapcurrentTimeService.h” // include the proxy declarations
#include “currentTime.nsmap” // include the XML namespace mappings
int main()
{
// create server and serve one CGI-based request:
currentTimeService server;
return server.serve();
}
int currentTimeService::currentTime(time_t& response)
{
response = time(0);
return SOAP_OK;
}
* stand-alone(non-multithreaded)서버를 돌리고 싶은 경우 main함수에서 return currentTimeService.run(8080);으로 변경
3. 서버용 SOAP 작동을 위한 코드 생성
1) 앞에서 object를 사용하지 않는 경우
> soapcpp2 -S currentTime.h
2) 앞에서 object를 사용하는 경우
> soapcpp2 -c -S currentTime.h
* ‘-c’ 옵션을 사용하면 c코드로 서버코드가 생성됨
4. CGI binary로 컴파일
> c++ -o currentTime.cgi currentTime.cpp soapC.cpp soapServer.cpp -lgsoap++
5. cgi 파일 테스트
./currentTime.cgi < currentTime.currentTime.req.xml
[1] Robert van Engelen, “gSOAP 2.8.3 User Guide”, GENIVIA INC, June 24, 2011, p11~14