最近有個工作任務,需要在C++環境下調用WebService。網上找了很多資料,遇到各種問題折騰了兩天,好在總算是搞定了。特此記錄一下過程。
1:安裝gSOAP
我是通過gSOAP的方式訪問的WebService。那么首先要下載gSOAP,下載地址:http://sourceforge.net/projects/gsoap2/。我下載的版本是2.8的,直接解壓在桌面上,路徑:C:\Users\xsooy-pc\Desktop\gsoap-2.8。
2:生成WebService頭文件
運行CMD,進入控制台管理器。進入gSOAP的win32目錄下:
在這個路徑下建立一個字符轉換規則文件wsmap.dat,文件內容為xsd__string = | std::wstring | wchar_t*,那么SOAP/XML中的string將轉換成std::wstrin或wchar_t*,這樣能更好地支持中文。
我的WebService地址是:http://t.os.gs.cn/api/cn_2017.asmx。
生成頭文件:
-o 文件名,指定輸出頭文件
-n 名空間前綴 代替默認的ns
-c 產生純C代碼,否則是C++代碼
-s 不要使用STL代碼
-t 文件名,指定type map文件,默認為typemap.dat
-e 禁止為enum成員加上名空間前綴
執行命令后,當前目錄下多了一個WebService.h的頭文件:
3:根據WebService頭文件生成其他文件
-C 僅生成客戶端代碼
-S 僅生成服務器端代碼
-L 不要產生soapClientLib.c和soapServerLib.c文件
-c 產生純C代碼,否則是C++代碼(與頭文件有關)
-I 指定import路徑(見上文)
-x 不要產生XML示例文件
-i 生成C++包裝,客戶端為xxxxProxy.h(.cpp),服務器端為xxxxService.h(.cpp)
執行完之后,目錄下的文件結構如下:
4:新建C++控制台程序,並添加引用文件
把生成文件加到項目里面來,上級目錄中的這兩個文件也加進來:
注意引用進來的cpp文件取消預編譯,否則會出錯。
5:最后附上源代碼
http://download.csdn.net/detail/springxie9851/9888626