windows下使用开源gSOAP技术调用WebService
?
首先通過WSDL文檔生成C++頭文件
??????? WSDL (Web Services Description Language,Web服務描述語言)是一種XML Application,他將Web服務描述定義為一組服務訪問點,客戶端可以通過這些服務訪問點對包含面向文檔信息或面向過程調用的服務進行訪問(類似遠程過程調用)。WSDL首先對訪問的操作和訪問時使用的請求/響應消息進行抽象描述,然后將其綁定到具體的傳輸協議和消息格式上以最終定義具體部署的服務訪問點。相關的具體部署的服務訪問點通過組合就成為抽象的Web服務。
??????? 通過WSDL生成訪問接口:(http://10.130.40.220:9081/dcmsWebservice/webservice/unifiedMessage?wsdl為此次調試WebService接口)設定c/c++工程名稱為TestWebService(Console程序,其他應用程序類型也可),在該文件夾下面建立TestWebService.h文件。
??????? 啟動cmd,進入到下載下來的gSoap包的解壓路徑,然后在解壓出來的根目錄下找到\gsoap\bin\win32目錄,調用wsdl2h.exe程序生成TestWebService.h頭文件接口定義。
?
wsdl2h -s –o x:/xxx/TestWebService.hhttp://10.130.40.220:9081/dcmsWebservice/webservice/unifiedMessage?wsdl
?
?????? 這里提供一下該目錄下兩個可執行文件的常用選項:
wsdl2h常用選項
- -o 文件名,指定輸出頭文件
- -n 名空間前綴 代替默認的ns
- -c 產生純C代碼,否則是C++代碼
- -s 不要使用STL代碼
- -t文件名,指定type map文件,默認為typemap.dat
- -e 禁止為enum成員加上名空間前綴
soapcpp2常用選項
- -C 僅生成客戶端代碼
- -S 僅生成服務器端代碼
- -L 不要產生soapClientLib.c和soapServerLib.c文件
- -c 產生純C代碼,否則是C++代碼(與頭文件有關)
- -I 指定import路徑(見上文)
- -x 不要產生XML示例文件
- -i 生成C++包裝,客戶端為xxxxProxy.h(.cpp),服務器端為xxxxService.h(.cpp)。
??????? 然后解析TestWebService.h文件,生成存根程序(若需要純C語言可以使用-c,而非-C,具體可參看常用選項):
soapcpp2?–C x:/xxx/TestWebService.h
?
??????? 執行成功之后在當前路徑下生成下列文件:
?
??????? 如果在執行該步驟時如果看到soapcpp2提示:”Critical error: #import: Cannot open file "stlvector.h" forreading. “, 那是因為我們的頭文件使用了STL(wsdl2h 沒用-s選項 ),這時要使用-I選項指定gSOAP的 import文件路徑,這個路徑是"$gsoap\gsoap\import ",$gsoap為解壓目錄:
?
soapcpp2 hello.h -I xx\gsoap\import
?
使用生成的頭文件調試WebService
??????? 建立以TestWebService為名稱的console工程,將生成的soapC.cpp、soapH.h、soapStub.h、soapunifiedMessageSoapBindingProxy.h、soapClient.cpp、unifiedMessageSoapBinding.nsmap拷貝到工程目錄并加入到工程中;
??????? 然后將在gsoap解壓目錄下的stdsoap2.h,stdsoap2.cpp拷貝到工程目錄并加入到工程中。
需要注意的是:
1、stdsoap2.cpp、soapC.cpp、soapServiceSoapProxy.cpp 不需要預編譯
2、常見錯誤示例: 如error C1010 ,一般是預編譯頭文件的問題,在主函數中需要選預編譯,添加 StdAfx.h;如error? LNK2001,一般是在網絡編程中需要WSOCK32.lib,添加上即可。
?????? 此時工程結構如下:?
?
??????? 新建TestWebService.cpp,cpp結構如下,包含main函數整體代碼:
[cpp] view plaincopyprint???????? 其中soap_call_ns1__doService即為此WebService的功能接口,可以在生成的soapClient.cpp中查看此接口,到這里對此WebService的基礎調用就全部完成了。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的windows下使用开源gSOAP技术调用WebService的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt实现3D纹理渲染自由旋转空间立方体
- 下一篇: 将查询结果插入到现有表中