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比較方便。
【編輯推薦】