Symbian学习笔记(21)——原来还有这个工具wsdl2cpp,访问webservice也很简单

在论坛里看到有人问使用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要麻烦一点了。

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

view plaincopy to clipboardprint?

private:

//Data  

CHelloWSThreeAppView*iAppView;

CPServiceService*iService;

CPServiceConsumer*iObserver;

private:
  // Data
  CHelloWSThreeAppView* iAppView;
  CPServiceService * iService;
  CPServiceConsumer * iObserver;

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

view plaincopy to clipboardprint?

//这里初始化代码  

CSenXmlServiceDescription*pServiceDesc=CSenXmlServiceDescription::NewLC(KServiceEndpoint,KNullDesC8());

pServiceDesc->SetFrameworkIdL(KDefaultBasicWebServicesFrameworkID);

iObserver=CPServiceConsumer::NewLC();

iService=CPServiceService::NewLC(*iObserver,*pServiceDesc);

 

_LIT(KStr,"Initservice.");

LOG(KStr);

//这里远程调用代码  

if(iObserver->iStatus==KSenConnectionStatusReady){  

RHelloWorldaHello;

RHelloWorldResponseaHelloResp;

 

TRAPD(error,aHelloResp=iService->HelloWorldL(aHello));

if(error){     

RDebug::Printf("error%d",error);

}

TBuf<64>buf;

buf.Copy(aHelloResp.iHelloWorldResult);

_LIT(KStr,"resultis%S");

LOG_FORMAT((KStr,buf));

}

//这里初始化代码
CSenXmlServiceDescription *pServiceDesc = CSenXmlServiceDescription::NewLC(KServiceEndpoint, KNullDesC8());
pServiceDesc->SetFrameworkIdL(KDefaultBasicWebServicesFrameworkID);
iObserver = CPServiceConsumer::NewLC();
iService = CPServiceService::NewLC(*iObserver,*pServiceDesc);
_LIT(KStr,"Init service.");
LOG(KStr);
//这里远程调用代码
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));
}

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

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

时间: 2024-08-30 23:52:11

Symbian学习笔记(21)——原来还有这个工具wsdl2cpp,访问webservice也很简单的相关文章

Symbian学习笔记

Symbian学习笔记(22) - 关于皮肤的小结 Symbian学习笔记(21)--原来还有这个工具wsdl2cpp,访问webserv Symbian学习笔记(20)--用gSOAP更简单地实现Web Services Clien Symbian学习笔记(19)--初探WebServices API的使用(下) Symbian学习笔记(18)--初探WebServices API的使用(中) Symbian学习笔记(17)--初探WebServices API的使用(上) Symbian学习

Symbian学习笔记(17)——初探WebServices API的使用(上)

很久没有学习Symbian了,今天研究一下如何使用Symbian中提供的WebService框架来SayHello. 从SDK文档中提供的资料来看这个接口似乎有点复杂,包括了Connection API.Description API和Manager API三套东西,此外还涉到了XML的解析之类的一些API的应用. 阅读了一下它的例子程序(S60Ex目录下的AddressBook),让我更晕乎了.怎么跟自己平时使用的WebService不一样了? 在SDK文档中关于CSenServiceConn

spring学习笔记(21)编程式事务配置,service层概念引入

访问数据库事务导入 在我之前的文章<spring学习笔记(19)mysql读写分离后端AOP控制实例>中模拟数据库读写分离的例子,在访问数据库时使用的方法是: public <E> E add(Object object) { return (E) getSessionFactory().openSession().save(object); } 通过直接开启session而后保存对象.查询数据等操作,是没有事务的.而如果我们的项目规模变大,业务逻辑日益复杂,我们在一个方法中进行大

《After Effects CC中文版超级学习手册》——1.6 小试身手:精彩制作有时很简单

1.6 小试身手:精彩制作有时很简单 实例文件位置:光盘AE CC手册源文件CH01实例文件夹换字模板1.aep 这里现有一个AE CC项目文件,先看看其最终效果,如图1-24所示. 这里在其基础上只要小小地修改一下文字,就能成为你有用的视频了,其操作如下. 步骤1:打开本节提供的文件"换字模板1.aep",在时间轴的"你的文字1"面板中,双击文字图层,将原来的文字修改为你想要的文字,如这里的"123工作室",如图1-25所示. 步骤2:在时间轴

Symbian学习笔记(5)——加载JPEG图像的方法

上次学习的是从MIF和MBM文件中加载图像,一般在程序中出现的图片都可以用这个方法,但有一点点遗憾,它只能使用svg或bmp格式,BREW或J2ME中的资源却多为png格式的. 如果想在symbian中使用jpg或者png图片,则需要用到symbian提供的那个Multimedia ICL库里的类了.其中比较重的是CImageDecoder类,提供了对图像进行解码的功能. 来看看如何使用它的吧.先定义两个字串: _LIT(KJPEGFile,"C:\\Data\\me.jpg"); _

Symbian学习笔记(4)——在GUI应用中使用图像

学习一下如何修改GUI程序中的图标与如何加载图像. 与2nd.不同的是,3rd.支持svg格式的可缩放图标(最大好处在于一个图标搞定,以前用bmp时为了应用程序的菜单图标得要做四个小图标).而且,现在有了一种新的图像打包格式mif(这名字咋跟BREW中那个MIF一样啊).虽然还支持以前的MBM方式但是不建议使用了. 要在应用程序中增加图像图标资源,过程如下: 第一步,先将要加入的图像放在工程的/gfx目录下,如: qgn_menu_DemoUI.svg splash2.bmp 前面一个就是应用程

Symbian学习笔记(2)——基本概念

第一次打开SymbianC++的程序源代码,第一感觉就是"这是C/C++吗?咋这么眼生啊". 看代码看书,才算是稍稍明白了一点,其实无非就是typedef罢了,symbian可比brew定义了更多的东西. 这是以后干活的基础,所以做个笔记,省得忘了. 一.基本数据类型 这个比较简单,都在e32def.h中写着呢.也就是以下这几个类型要注意一下,以后照着写罢了,含义也很明了,不用多说. typedef void TAny; typedef signed char TInt8; typed

ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据

个人认为,XTemplate是ExtJs中最灵活的用来显示数据的组件,有点类似aspx中的Repeater控件,显示数据的模板完全可以由用户以html方式来定制. 先给一个官方的静态示例(稍微改了下),代码并不复杂,关键的地方,我已经注释了 1 <script type="text/javascript"> 2 Ext.onReady(function() { 3 4 var data = { 5 name: 'Jack Slocum', 6 title: 'Lead De

Symbian学习笔记(20)——用gSOAP更简单地实现Web Services Client

昨天折腾了一下那个gSOAP,发现这东西比Symbian自带的WebServiceAPI更简单方便,推荐使用! gSOAP的官方网站是:http://gsoap2.sourceforge.net/ 具体使用方法不多说,因为网上GOOGLE 一下很多资料.下面只对在symbian环境下使用略说几点. 我下载的是最新版的v2.7.10,下载的压缩包里就有一个symbian目录,里面是在symbian的例子,可以参考. 试着做了一个HelloWorld,还是访问前面做的那个web service,按照