日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows下使用开源gSOAP技术调用WebService

發布時間:2025/3/21 windows 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows下使用开源gSOAP技术调用WebService 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大名鼎鼎的gSOAP Toolkit 這里就不多做介紹了,此次的WebService訪問即是借助此工具開發的,獲取最新版本可以上sourceforge獲取,此處是下載地址http://sourceforge.net/projects/gsoap2/,這里使用的是2.8版本。

?

首先通過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?
  • #include?"soapH.h"??
  • #include?"unifiedMessageSoapBinding.nsmap"??
  • #include?"soapStub.h"??
  • #include?"stdsoap2.h"??
  • #include?"md5.h"??
  • #include?<iostream>??
  • #include?<string>??
  • ??
  • using?namespace?std;??
  • ??
  • std::string?UTF8ToGB(const?char*?str);??
  • ??
  • int?main()??
  • {?????
  • ????struct?ns1__doServiceResponse?loginResponse;??
  • ????string?m_strRespContent?=?"";??
  • ????struct?soap?clientSOAP;??
  • ??
  • ????//?產生MD5摘要??
  • ????char?buf[64]?=?{0};??
  • ????char?digest[16]?=?{0};??
  • ????char?printable[64]?=?{0};??
  • ????strcpy(buf,?"1001");??
  • ????md5_state_t?state;??
  • ????md5_init(&state);??
  • ????md5_append(&state,?(const?md5_byte_t?*)buf,?strlen(buf));??
  • ????md5_finish(&state,?(md5_byte_t?*)digest);??
  • ????md5_digest_printable((md5_byte_t?*)digest,?printable,?sizeof(printable));??
  • ??
  • ????soap_init(&clientSOAP);??
  • ??
  • ????if(soap_call_ns1__doService(&clientSOAP,?NULL,???
  • ????????????NULL,?"3000",?"1001",?"1001",?"ucdsAddress",?loginResponse._return_)?==?SOAP_OK)??
  • ????{??
  • ????????m_strRespContent?=?UTF8ToGB(loginResponse._return_);??
  • ????????printf(m_strRespContent.c_str());??
  • ????}??
  • ????else??
  • ????{??
  • ????????printf("Error\n");??
  • ????}??
  • ??
  • ????soap_destroy(&clientSOAP);??
  • ??
  • ????soap_end(&clientSOAP);??
  • ??
  • ????soap_done(&clientSOAP);??
  • ??
  • ????while(1);??
  • ??
  • ????return?0;??
  • }??
  • ??????? 其中soap_call_ns1__doService即為此WebService的功能接口,可以在生成的soapClient.cpp中查看此接口,到這里對此WebService的基礎調用就全部完成了。

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的windows下使用开源gSOAP技术调用WebService的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。