Symbian學(xué)習(xí)筆記(19)
首先,去forum.nokia.com.cn搜一下WSDL-to-C++_for_S60,這是用于Carbice Vs的工具,不過也可以獨立安裝,用命令行來生成所需要的代碼。下載安裝即可。
第二步,運行它的wsdl2cpp工具,得到一些源代碼,不過它比gSOAP弱智一點點,不能直接給出一個wsdl的URL,所以最好將wsdl下載到本地,給它一個文件名即可:
wsdl2cpp --callback-class PServiceConsumer --include-dir .\work\inc --source-dir .\work\src pservice.wsdl
這樣我們會在當(dāng)前目錄下的work/src和work/inc下得到它生成的頭與源文件,實現(xiàn)的原理仍是用的Symbian內(nèi)置的Web Service API來做的。將這些代碼弄到工程里去。
第三步,工程里新增了代碼,修改mmp,與直接使用這些API一樣,總之,這個工具只是幫助我們生成了源碼框架,比較方便罷了。不過額外有一點增加的地方是:
LIBRARY XmlDataBinding.lib USERINCLUDE \epoc32\include\libc USERINCLUDE \epoc32\include\xmldatabinding
這里的xmldatabinding是新的東西,所以之前需要安裝,在安裝wsdl-to-c++工具后,有一個XmlDataBinding.zip在它的目錄下,打開解到相應(yīng)的epoc32目錄里去即可。它包括了lib和一些頭文件。
并且,在手機跑,應(yīng)該將XmlDataBinding.sis也安裝一下,從這一點看,似乎比gSOAP要麻煩一點了。
第四步,現(xià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)時要刪除這些成員變量。
總結(jié)一下,其實我用三種方法來調(diào)用web service,都是最簡單的HelloWorld,比較而言,還是gSOAP比較方便。
【編輯推薦】















 
 
 
 
 
 
 