gsoap 實現 C/C++ 調用web service
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.wsdl3. 使用使用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