Aug 112011
 

본 문서는 gSOAP User Guide[1]를 기반으로 해서 작성하였음.

– 간단한 SOAP Client 제작

http://www.genivia.com/calc.wsdl 에 있는 SOAP Provider로 부터 Stub을 작성하여 C++ 기반으로 작성하였음.
calc 서비스는 간단히 double Type의 두개의 매개변수를 받아 덧셈, 곱셈 등 계산을 하여 double Type의 계산 결과를 리턴하는 서비스이다.

1. ‘.h 헤더 파일’ 생성
(1) C++ without STL ( -s 옵션에 의해 STL이 빠짐)
> wsdl2h -s -o calc.h http://www.genivia.com/calc.wsdl

(2) Pure C Application (-c 옵션)
> wsdl2h -c -o calc.h http://www.genivia.com/calc.wsdl

2. 헤더 파일을 통해 C/C++ API를 생성
(1) C++
> soapcpp2 -i -C -I<import> calc.h
여기서 ‘<import>’는 ~/gsoap-2.8/gsoap/import 경로를 입력
– ‘-C’옵션은 Client 코드만 생성

(2) C
> soapcpp2 -c -C -I<import> calc.h

3. 실제 서비스를 사용해보는 예제 코드
1) cpp 코드  (예를들어 main.cpp)

#include “soapcalcProxy.h”

#include “calc.nsmap”

int main()

{

calcProxy service;

double result;

if (service.add(1.0, 2.0, result) == SOAP OK)

std::cout << “The sum of 1.0 and 2.0 is ” << result << std::endl;

else

service.soap_stream_fault(std::cerr);

return 0;

}

 

2) C 코드 (예를들어 main.c)

#include “soapH.h”

#include “calc.nsmap”

int main()

{

 

struct soap *soap = soap_new();

double result;

if (soap_call_ns2__add(soap, NULL, NULL, 1.0, 2.0, &result) == SOAP_OK)

printf(“The sum of 1.0 and 2.0 is %lg\n”, result);

else

soap_print_fault(soap, stderr);

soap_end(soap);

soap_free(soap);

return 0;

 

}

 

4. 컴파일
1) c++
> g++ ~/gsoap-2.8/gsoap/stdsoap2.cpp main.cpp soapC.cpp soapcalcProxy.cpp

2) c
> gcc ~/gsoap-2.8/gsoap/stdsoap2.c main.c soapC.c soapClient.c

5. 실행해서 잘 되는지 확인하기

[1] Robert van Engelen, “gSOAP 2.8.3 User Guide”, GENIVIA INC, June 24, 2011, p8~11


 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.