gsoap 實現 C/C++ 調用web service

jopen 10年前發布 | 39K 次閱讀 WEB服務/RPC/SOA gSoap

gSOAP 是什么?

gSOAP編譯工具提供了一個SOAP/XML 關于C/C++ 語言的實現,從而讓C/C++語言開發web服務或客戶端程序的工作變得輕松了很多。絕大多數的C++web服務工具包提供一組API函數類庫來處理特定的SOAP數據結構,這樣就使得用戶必須改變程序結構來適應相關的類庫。與之相反,gSOAP利用編譯器技術提供了一組透明化的SOAP API,并將與開發無關的SOAP實現細節相關的內容對用戶隱藏起來。

簡單來說,  gSOAP 功能之一就是可以幫助我們使用C/C++調用web Service.

 

下載gSOAP

gSOAP的官方網站是:

http://www.cs.fsu.edu/~engelen/soap.html

 

可以到

http://sourceforge.net/projects/gsoap2/?source=typ_redirect 下載gSOAP

下載的是一個zip 包, 解壓后路徑如下:

 

gsoap/bin 目錄下是針對不同的系統的開發工具。

 

客戶端代碼生成和調用步驟

1. 首先要有服務端的wsdl (如果已經有地址的話, 可以在瀏覽器中保存這個wsdl)

這里假設wsdl 的 文件名為 test.wsdl

2. 使用wsdl2h.exe,根據wsdl生成一個頭文件(比如test.h),這是個臨時文件,下一步驟執行完后自動刪除即可!

命令:

wsdl2h.exe -c -e -o test.h test.wsdl
3.  使用使用soapcpp2.exe生成客戶端調用代碼,soapcpp2.exe是可以生成構建C++ SOAP客戶端所需的C++源碼的預編譯器,
(生成代碼后test.h就沒有用了,可以直接刪除)

命令:

soapcpp2.exe  -C test.h

-C : 只生成客戶端代碼

 

看一看產生出來的文件結構:

紅色框起來的部分都是新產生出來的

綠色的部分適合 web service 相關的文件

 

XXXSoapBinding.nsmap:namespaces聲明,需要包含在一個cpp文件里面,比如放在StdAfx.cpp里面,否則連接時報錯:unresolved external symbol _namespaces

 

在實際調用的時候, 在調用的 .c 文件中

#include "soapStub.h"
#include "soapH.h"
#include "XXXSoapBinding.nsmap"

//call web service 的方法

調用的方法會在 soapStub.h 頭文件中產生。

 

也可以打包成 libsoa.a 這樣的靜態鏈接庫這樣的文件來使用。

兩條命令:
  cc -c libsoa.c soapC.c soapClient.c stdsoap2.c
  ar r libsoa.a libsoa.o soapC.o soapClient.o stdsoap2.o

stdsoap2.h,stdsoap2.c   在下載的gsoap 目錄下

 

其他

如果開發的web service 比較多的話, name space比較多, 有可能出現一些混亂。

這個時候可以指定固定的前綴

新建一個  typemap.dat 的文件

內容如下:

ns1 = "http://XXX"
ns2 = "http://XXXXX2"
ns3 = "http://XXXXXX3"     
ns4 = "http://XXXXXX4"

在命令產生 .h , .c 文件時多加一個參數, 比如對于 .h 來說

wsdl2h.exe -t ./typemap.dat -c -e -o test.h

來自:http://blog.csdn.net/oscar999/article/details/40342301

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!