Symbian學(xué)習(xí)筆記(19)
首先,去forum.nokia.com.cn搜一下WSDL-to-C++_for_S60,這是用于Carbice Vs的工具,不過(guò)也可以獨(dú)立安裝,用命令行來(lái)生成所需要的代碼。下載安裝即可。
第二步,運(yùn)行它的wsdl2cpp工具,得到一些源代碼,不過(guò)它比gSOAP弱智一點(diǎn)點(diǎn),不能直接給出一個(gè)wsdl的URL,所以最好將wsdl下載到本地,給它一個(gè)文件名即可:
wsdl2cpp --callback-class PServiceConsumer --include-dir .\work\inc --source-dir .\work\src pservice.wsdl
這樣我們會(huì)在當(dāng)前目錄下的work/src和work/inc下得到它生成的頭與源文件,實(shí)現(xiàn)的原理仍是用的Symbian內(nèi)置的Web Service API來(lái)做的。將這些代碼弄到工程里去。
第三步,工程里新增了代碼,修改mmp,與直接使用這些API一樣,總之,這個(gè)工具只是幫助我們生成了源碼框架,比較方便罷了。不過(guò)額外有一點(diǎn)增加的地方是:
LIBRARY XmlDataBinding.lib USERINCLUDE \epoc32\include\libc USERINCLUDE \epoc32\include\xmldatabinding
這里的xmldatabinding是新的東西,所以之前需要安裝,在安裝wsdl-to-c++工具后,有一個(gè)XmlDataBinding.zip在它的目錄下,打開解到相應(yīng)的epoc32目錄里去即可。它包括了lib和一些頭文件。
并且,在手機(jī)跑,應(yīng)該將XmlDataBinding.sis也安裝一下,從這一點(diǎn)看,似乎比gSOAP要麻煩一點(diǎn)了。
第四步,現(xiàn)在開始動(dòng)手修改代碼,很簡(jiǎn)單了。
- private:
 - // Data
 - CHelloWSThreeAppView* iAppView;
 - CPServiceService * iService;
 - CPServiceConsumer * iObserver;
 
在頭文件里增加iService和iObserver就可以了,CPP中有兩步,一是初始化連接,二是遠(yuǎn)程調(diào)用方法:
- //這里初始化代碼
 - CSenXmlServiceDescription *pServiceDesc = CSenXmlServiceDescription::NewLC(KServiceEndpoint, KNullDesC8());
 - pServiceDesc->SetFrameworkIdL(KDefaultBasicWebServicesFrameworkID);
 - iObserver = CPServiceConsumer::NewLC();
 - iService = CPServiceService::NewLC(*iObserver,*pServiceDesc);
 - _LIT(KStr,"Init service.");
 - LOG(KStr);
 - //這里遠(yuǎn)程調(diào)用代碼
 - if(iObserver->iStatus==KSenConnectionStatusReady){
 - RHelloWorld aHello;
 - RHelloWorldResponse aHelloResp;
 - TRAPD(error,aHelloResp=iService->HelloWorldL(aHello));
 - if(error){
 - RDebug::Printf("error %d",error);
 - }
 - TBuf<64> buf;
 - buf.Copy(aHelloResp.iHelloWorldResult);
 - _LIT(KStr,"result is %S");
 - LOG_FORMAT((KStr,buf));
 - }
 
這樣就好了,當(dāng)然析構(gòu)時(shí)要?jiǎng)h除這些成員變量。
總結(jié)一下,其實(shí)我用三種方法來(lái)調(diào)用web service,都是最簡(jiǎn)單的HelloWorld,比較而言,還是gSOAP比較方便。
【編輯推薦】















 
 
 
 
 
 
 