wsdl2cpp,访问webservice也很简单
来源:互联网 发布:学佛 源码 编辑:程序博客网 时间:2024/03/29 19:51
原来还有这个工具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”——原贴需要修改成下面
SYSTEMINCLUDE /epoc32/include/libc /epoc32/include/xmldatabinding
LIBRARY XmlDataBinding.lib senservconn.lib senservdesc.lib
这里的xmldatabinding是新的东西,所以之前需要安装,在安装wsdl-to-c++工具后,有一个XmlDataBinding.zip在它的目录下,打开解到相应的epoc32目录里去即可。它包括了lib和一些头文件。
并且,在手机跑,应该将XmlDataBinding.sis也安装一下,从这一点看,似乎比gSOAP要麻烦一点了。
第四步,现在开始动手修改代码,很简单了。
view plaincopy to clipboardprint?
1. private:
2.
3. // Data
4.
5.
6.
7. CHelloWSThreeAppView* iAppView;
8.
9.
10.
11. CPServiceService * iService;
12.
13. CPServiceConsumer * iObserver;
private:
// Data
CHelloWSThreeAppView* iAppView;
CPServiceService * iService;
CPServiceConsumer * iObserver;
在头文件里增加iService和iObserver就可以了,CPP中有两步,一是初始化连接,二是远程调用方法:
view plaincopy to clipboardprint?
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. }
//这里初始化代码
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比较方便。
转自http://www.devdiv.net/viewthread.php?tid=4365&highlight=webservice
- wsdl2cpp,访问webservice也很简单
- Symbian学习笔记(21) - 原来还有这个工具wsdl2cpp,访问webservice也很简单
- 客户端访问webService简单应用
- 客户端访问webService简单应用
- 也谈VS2010非托管c++访问webservice服务
- (简单实例)如何从客户端访问WebService
- android访问php webservice简单一例
- android访问php webservice简单一例
- android访问php webservice简单一例
- android访问php webservice简单一例
- android访问php webservice简单一例
- c++访问webservice(gsoap简单使用)
- android中简单搞定webservice接口访问,以及webservice简析
- 访问webService
- 原来HQL也很简单
- 一个创建访问WebService的简单示例子
- WebService开发笔记 2 -- VS 2005 访问WebServcie更简单
- WebService开发笔记(二)-- VS2005访问WebServcie更简单
- 随性而写
- 动态创建iframe—IE与其他浏览器的不同
- 经历
- view改变跳转action
- DB2上机操作指令指南
- wsdl2cpp,访问webservice也很简单
- oracle 10g 数据库的整理
- ruby File怎么在源文件的基础上添加内容,而不是重写
- 表结构设计器EZDML介绍说明
- Table.Select,Table.Fine,Table.Clone 用法 总结
- 温故而知新,函数指针
- C#日期格式化
- window下dll做多国语言的翻译方法
- 手穴治疗