gSoap學習筆記


因為工作關系,需要在C++中調用C#所寫的webservice,在博客園中搜索可以發現很多關於gSoap的學習筆記,但自己還是想再寫一篇。特定於自己的版本和使用環境。

客戶端在windows環境下,使用gSoap2.8.11和VS2008。webservice的服務器用c#實現。

服務器端的實現省略不談~~先用瀏覽器打開webservice的網頁

點擊“服務說明”,可以查看到這個ws的"wsdl"文件,將其復制保存到文本文件中(下面會使用到)。

下載gSoap2.8.11版后,解壓,在命令行中進入 gsoap-2.8/gsoap/bin/win32/  ,會發現有兩個文件"soapcpp2.exe","wsdl2h.exe",將上面保存的wsdl文本文件復制到此,並命名為"ws.wsdl"。

  1. 用WSDL文件生成c++頭文件,wsdl2h.exe -s -o ws.h ws.wsdl  ,執行完后會生成ws.h文件
  2. 用ws.h文件生成項目所需文件,

     ,執行完后會生成如圖所示的文件


    這里的文件會隨着webservice中定義函數的增多而增多。

  3. 復制 將上面除了soapClientLib.cpp文件以外,都復制、並添加到項目中。再將gsoap-2.8/gsoap文件夾下的stdsoap2.h,stdsoap2.cpp復制、並添加到項目中
  4. 修改 在項目中修改三個地方:sopaClient.cpp,soapC.cpp的第一行中添加#include "stdafx.h",在stdafx.cpp中添加#include "webService1Soap.nsmap"
  5. 運用 在項目中需要調用webservice的地方引用后綴為 soapProxy.h,在上面的例子中是soapWebService1SoapProxy.h。 
        WebService1Soap service;
        int v;
        service.ns1__Add(23,34,v);
        cout<<v<<"\n";

    在webservice中定義的函數都會加上ns1__前綴,最后一個參數為返回值,采用引用傳值方式返回想要的值。如果函數沒有返回值,則要定義一個ns1__NoReturnResponse變量作為占位符。

  如果函數返回是的字符串,則直接將char *ch類型的對象接收,並且不需要自己去管理內存。在本機上測試,用gsoap可以傳輸4M圖片的base64編碼。

PS:調通gsoap自己只用了一兩個小時的時間,這充分說明了gSoap的強大,關鍵她是開源的,之前從來沒有寫過C++的網絡程序,現在可以通過這個庫開始C++網絡編程了,有時間一定要將這個庫的源碼解剖一番。與gSoap相比,微軟的MSSoap就只能被人冷落了~~

 

 

參考:http://www.cnblogs.com/lvkun/archive/2010/03/30/gsoap_note.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM