Symbian学习笔记(19)

系统
有人问使用wsdl2cpp生成代码,才知道原来symbian提供了一个辅助工具来生成webservice client的代码,比起我上回折腾的自己参考AddressBook例子做的webservice客户端要简单多了,类似于gSOAP的使用。
有人问使用wsdl2cpp生成代码,才知道原来symbian提供了一个辅助工具来生成webservice client的代码,比起我上回折腾的自己参考AddressBook例子做的webservice客户端要简单多了,类似于gSOAP的使用。

  首先,去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

  这样我们会在当前目录下的work/src和work/inc下得到它生成的头与源文件,实现的原理仍是用的Symbian内置的Web Service API来做的。将这些代码弄到工程里去。

  第三步,工程里新增了代码,修改mmp,与直接使用这些API一样,总之,这个工具只是帮助我们生成了源码框架,比较方便罢了。不过额外有一点增加的地方是:

LIBRARY     XmlDataBinding.lib USERINCLUDE  \epoc32\include\libc USERINCLUDE  \epoc32\include\xmldatabinding

  这里的xmldatabinding是新的东西,所以之前需要安装,在安装wsdl-to-c++工具后,有一个XmlDataBinding.zip在它的目录下,打开解到相应的epoc32目录里去即可。它包括了lib和一些头文件。

  并且,在手机跑,应该将XmlDataBinding.sis也安装一下,从这一点看,似乎比gSOAP要麻烦一点了。

  第四步,现在开始动手修改代码,很简单了。

  1. private:   
  2.   
  3.     // Data   
  4.   
  5.   
  6.   
  7.     CHelloWSThreeAppView* iAppView;   
  8.   
  9.   
  10.   
  11.     CPServiceService * iService;   
  12.   
  13.     CPServiceConsumer * iObserver; 

  在头文件里增加iService和iObserver就可以了,CPP中有两步,一是初始化连接,二是远程调用方法:

  1. //这里初始化代码   
  2.   
  3. CSenXmlServiceDescription *pServiceDesc = CSenXmlServiceDescription::NewLC(KServiceEndpoint, KNullDesC8());    
  4.   
  5.         pServiceDesc->SetFrameworkIdL(KDefaultBasicWebServicesFrameworkID);    
  6.   
  7.             
  8.   
  9.         iObserver = CPServiceConsumer::NewLC();    
  10.   
  11.         iService = CPServiceService::NewLC(*iObserver,*pServiceDesc);   
  12.   
  13.            
  14.   
  15.         _LIT(KStr,"Init service.");   
  16.   
  17.         LOG(KStr);   
  18.   
  19.   
  20.   
  21.   
  22.   
  23. //这里远程调用代码   
  24.   
  25. if(iObserver->iStatus==KSenConnectionStatusReady){   
  26.   
  27.                 RHelloWorld aHello;   
  28.   
  29.                 RHelloWorldResponse aHelloResp;   
  30.   
  31.                    
  32.   
  33.                 TRAPD(error,aHelloResp=iService->HelloWorldL(aHello));   
  34.   
  35.                 if(error){         
  36.   
  37.                     RDebug::Printf("error %d",error);   
  38.   
  39.                 }   
  40.   
  41.                 TBuf<64> buf;   
  42.   
  43.                 buf.Copy(aHelloResp.iHelloWorldResult);   
  44.   
  45.                 _LIT(KStr,"result is %S");   
  46.   
  47.                 LOG_FORMAT((KStr,buf));   
  48.   
  49.         }  

 

  这样就好了,当然析构时要删除这些成员变量。

  总结一下,其实我用三种方法来调用web service,都是最简单的HelloWorld,比较而言,还是gSOAP比较方便。

【编辑推荐】

  1. Symbian每6个月发布一款新开源操作系统
  2. 微软建WindowsMarketplace 完善智能机平台
  3. 大力模仿Android 传微软WM6.5可装插件
责任编辑:庞桂玉 来源: it168
相关推荐

2009-04-12 09:02:32

Symbian诺基亚移动OS

2009-04-12 09:00:08

Symbian诺基亚移动OS

2009-04-12 08:59:05

Symbian诺基亚移动OS

2009-04-12 09:01:05

Symbian诺基亚移动OS

2009-04-12 08:57:50

Symbian诺基亚移动OS

2009-04-12 09:03:50

Symbian诺基亚移动OS

2009-04-12 08:55:18

Symbian诺基亚移动OS

2009-04-12 08:36:09

Symbian诺基亚移动OS

2009-04-12 08:51:50

Symbian诺基亚移动OS

2009-04-12 09:07:17

Symbian诺基亚移动OS

2009-04-12 08:45:32

Symbian诺基亚移动OS

2009-04-12 08:48:47

Symbian诺基亚移动OS

2009-04-12 08:50:08

Symbian诺基亚移动OS

2009-04-12 08:46:43

Symbian诺基亚移动OS

2012-05-24 09:38:08

Symbian

2009-04-12 08:52:52

Symbian诺基亚移动OS

2010-10-27 13:14:24

Symbian

2010-07-12 09:34:59

Symbian开发

2010-07-02 09:54:32

Symbian开发

2009-05-06 08:42:03

SymbianS60移动OS
点赞
收藏

51CTO技术栈公众号