通過gsoap使用webservice

一. 按照原來預(yù)研究的結(jié)果拔恰,使用gsoap的方法如下:

  1. wsdl2h.exe -o weather.h http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsd生成
    weather.h文件拒名。
  2. soapcpp2.exe -C weather.h -I E:\temp\gsoap-2.8\gsoap\import(E:\temp\gsoap-2.8\gsoap\import是我本地的路徑)闰蛔,這樣可以生成C++文件(soapClient.cpp, soapH.h, soapStub.h, WeatherWebServiceSoap.nsmap),然后還需要stdsoap2.cpp和stdsoap2.h 2個(gè)文件卖局,編譯的時(shí)候把這些文件加到工程中。調(diào)用的方法會(huì)在soapStub.h 頭文件中產(chǎn)生茅坛。
    參照了以后幾個(gè)wiki:

c++ 通過 gsoap實(shí)現(xiàn) webservice(附帶天氣實(shí)現(xiàn)的例子)
C++訪問WebService(gSoap方式和com組件方式)
C++訪問WebService(gSoap方式和com組件方式)

二. 以上步驟我本地測(cè)試網(wǎng)上公開的天氣接口案怯,證明是可用的,后面第三方接口提供了江场,我安裝以上方法去使用第三方的webservice接口纺酸,發(fā)現(xiàn)一些問題:

  1. 編譯的時(shí)候出現(xiàn)找不到"stdafx.h"
    解決:通過在響應(yīng)的.cpp中最開始添加#include "stdafx.h",修復(fù)該編譯錯(cuò)誤
  2. 編譯時(shí)遇到 stdsoap2.obj : error LNK2001: 無法解析的外部符號(hào)_namespaces
    解決: stdsoap2.h址否,添加
      #ifndef WITH_NONAMESPACES    #define WITH_NONAMESPACES    #endif

webservice gsoap 小記

三. 以上問題解決后餐蔬,又遇到一個(gè)更奇葩的問題碎紊,因?yàn)橐{(diào)用第三方的二個(gè)接口,但是這二個(gè)接口確實(shí)二個(gè)不同的webservice樊诺,最開始我采取了比較普通的方法仗考,按照gsoap的方法分別操作了二次,并且把這二次生成的文件放在了二個(gè)目錄中词爬,在工程中也是按照這樣的結(jié)構(gòu)添加文件秃嗜,但是

  1. 編譯的時(shí)候出問題"error C2374: “namespaces”: 重定義;多次初始化 gsoap",首先我就是谷歌了顿膨,按照一些搜索到的方法去做了锅锨,發(fā)現(xiàn)還是不行,造成這個(gè)問題的原因是因?yàn)槭褂枚鄠€(gè)webservice恋沃,每個(gè).nsmap中都會(huì)定義struct Namespace必搞,造成了重定義,怎么辦呢囊咏?
    解決: 后面找了些文章恕洲,發(fā)現(xiàn)我們可以將多個(gè)wsdl文件統(tǒng)一生成為一個(gè)頭文件,然后再用這個(gè)統(tǒng)一的頭文件來生成gsoap代碼則不會(huì)有沖突問題了(解救了我啊)梅割,方式是:
    wsdl2h -o file.h file1.wsdl file2.wsdl file3.wsdl‘

  2. 然后在執(zhí)行【一】中的【2】,生成C++文件霜第,這樣做了后,生成了C++文件炮捧,然后加到項(xiàng)目中,編譯惦银,成功咆课,小開心了一下,然后繼續(xù)去測(cè)試能否獲取到數(shù)據(jù)扯俱。測(cè)試的時(shí)候發(fā)現(xiàn)一直沒有獲取到數(shù)據(jù)书蚪,跟了下代碼,發(fā)現(xiàn)返回調(diào)用公共的接口返回415錯(cuò)誤迅栅,谷歌了下殊校,發(fā)現(xiàn)是因?yàn)閟ervice端只支持 soap 1.1,而gsoap生成客戶端代碼默認(rèn)是1.2
    解決: gsoap 的soapcpp2的參數(shù) -1 為soap 1.1 -2為soap1.2,具體就是把【一】【2】中的soapcpp2.exe -C weather.h -I E:\temp\gsoap-2.8\gsoap\import改成soapcpp2.exe -1 -C weather.h -I E:\temp\gsoap-2.8\gsoap\import,這樣就支持soap1.1了读存。

  3. 改了之后再測(cè)試为流,發(fā)現(xiàn)一直返回12錯(cuò)誤,崩潰~~~让簿,網(wǎng)上找了好多敬察,也沒發(fā)現(xiàn)是什么問題。

  4. 為了解決問題尔当,繼續(xù)找啊莲祸,發(fā)現(xiàn)一個(gè)blog:gSoap編寫代碼訪問WCF服務(wù),發(fā)現(xiàn)這個(gè)博主使用的是代理類的形式,我想反正我那條路已經(jīng)斷了,要不也參照下這個(gè)blog試一下吧锐帜,說干就干田盈,參照這,把gsoap的操作改成一下方式了:

  5. wsdl2h.exe -v -o test.h WebService1.wsd WebService2.wsd

  6. soapcpp2.exe -1 -C -j -I E:\temp\gsoap-2.8\gsoap\import test.h
    然后把XXXProxy.cpp中的方法中的soap_endpoint的值改一下缴阎,為什么要改呢允瞧?因?yàn)槟J(rèn)gsoap會(huì)將所有的service的endpoint加在一起賦值給每個(gè)接口,這樣就會(huì)出現(xiàn)類似
    soap_endpoint=
    "http://10.32.4.20:8012/QueryInterface.asmxhttp://10.32.4.20:9988/CommonService.svc";
    的形式,其實(shí)我們需要的是
    soap_endpoint = "http://10.32.4.20:8012/QueryInterface.asmx";
    所以需要手動(dòng)去把有類似問題的都改一下药蜻,改好后再重新編譯瓷式,OK,都沒有問題语泽,繼續(xù)測(cè)試贸典,OMG,完美踱卵,可以正常訪問廊驼,心里終于舒坦了。

四. gsoap設(shè)置超時(shí)

  1. 修改gsoap自動(dòng)生成的代碼才能進(jìn)行超時(shí)設(shè)置(我這邊訪問web service的代碼都是gsoap工具自動(dòng)生成.根據(jù)wsdl接口)
  2. 找到生成的soapwwwsdlBindingProxy.cpp文件
  3. 找到你要設(shè)置超時(shí)的那個(gè)調(diào)用服務(wù)器的方法
  4. 找到該方法代碼 struct soap *soap = this;
    在該代碼下添加如下三行代碼(時(shí)間大小根據(jù)項(xiàng)目自行調(diào)整)
    soap->recv_timeout = 2;//接受 (單位是秒)
    soap->send_timeout = 2;//發(fā)送 (單位是秒)
    soap->connect_timeout = 2;//連接(單位是秒)

--以上就是這次通過gsoap使用webservice的全部過程惋砂,記錄下來妒挎,方便自己以后查閱,也希望對(duì)遇到同樣問題的你西饵,有所幫助酝掩。
以上有參考一下wiki:
gsoap之client端引用多個(gè)service時(shí)命名沖突
gsoap 調(diào)用 WCF 415 錯(cuò)誤

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市眷柔,隨后出現(xiàn)的幾起案子期虾,更是在濱河造成了極大的恐慌,老刑警劉巖驯嘱,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镶苞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鞠评,警方通過查閱死者的電腦和手機(jī)茂蚓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剃幌,“玉大人聋涨,你說我怎么就攤上這事「合纾” “怎么了牛郑?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)敬鬓。 經(jīng)常有香客問我淹朋,道長(zhǎng)笙各,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任础芍,我火速辦了婚禮杈抢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仑性。我一直安慰自己惶楼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布诊杆。 她就那樣靜靜地躺著歼捐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晨汹。 梳的紋絲不亂的頭發(fā)上豹储,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音淘这,去河邊找鬼剥扣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铝穷,可吹牛的內(nèi)容都是我干的钠怯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼曙聂,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼晦炊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宁脊,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤断国,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后朦佩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體并思,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庐氮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年语稠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弄砍。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仙畦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出音婶,到底是詐尸還是另有隱情慨畸,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布衣式,位于F島的核電站寸士,受9級(jí)特大地震影響檐什,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弱卡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一乃正、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婶博,春花似錦瓮具、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挠轴,卻和暖如春传睹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忠荞。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工蒋歌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人委煤。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓堂油,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親碧绞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子府框,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • gsoap入門 1 使用gsoap搭建web service 參考了參考文檔[2]中的介紹,有一點(diǎn)點(diǎn)修改讥邻。 1.1...
    menglj閱讀 8,564評(píng)論 2 3
  • 一迫靖、Java基礎(chǔ) 1.寫出下面代碼的執(zhí)行結(jié)果 2.寫出下面代碼的執(zhí)行結(jié)果 3.寫出下面代碼的執(zhí)行結(jié)果 (此題需寫出...
    joshul閱讀 509評(píng)論 0 1
  • ONVIF簡(jiǎn)介 ONVIF規(guī)范描述了網(wǎng)絡(luò)視頻的模型、接口兴使、數(shù)據(jù)類型以及數(shù)據(jù)交互的模式系宜。并復(fù)用了一些現(xiàn)有的標(biāo)準(zhǔn),如W...
    ORCLee閱讀 8,497評(píng)論 0 1
  • 概覽 CXF frontends 是一組編程的API发魄,被用來開發(fā)和發(fā)布webservice盹牧。CXF支持兩種類型的f...
    JohnShen閱讀 1,284評(píng)論 2 2
  • ???對(duì)人表現(xiàn)出真摯的關(guān)心 1(11.04) 我們所有人—無論是屠夫、糕點(diǎn)師励幼,或者是君主汰寓,任何人都喜歡那些表示對(duì)我...
    Betty_曉芳閱讀 130評(píng)論 0 1