8월 112011
 

본 문서는 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