Symbian学习笔记(17) - 初探WebServices API的使用(上)
来源:互联网 发布:淘宝订单有没有限额 编辑:程序博客网 时间:2024/05/17 06:47
很久没有学习Symbian了,今天研究一下如何使用Symbian中提供的WebService框架来SayHello。
从SDK文档中提供的资料来看这个接口似乎有点复杂,包括了Connection API、Description API和Manager API三套东西,此外还涉到了XML的解析之类的一些API的应用。
阅读了一下它的例子程序(S60Ex目录下的AddressBook),让我更晕乎了。怎么跟自己平时使用的WebService不一样了?
在SDK文档中关于CSenServiceConnection有这么一段描述:
Web Services包括两种不同的框架模型: 1. Identity Based Web Services Framework (ID-WSF). The framework ID for this is KDefaultIdWsfFrameworkID ("ID-WSF"). 2. Basic Web Services Framework. Framework ID is KDefaultBasicWebServicesFrameworkID ("WS-I").
如果提供了Contract则缺省使用ID-WSF。
首先用.NET做一个简单的WebServices来测试,就用缺省产生的HelloWorld吧。很简单的,它的SOAP描述如下:
POST /uim/PService.asmx HTTP/1.1Host: localhostContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "urn:pservice:helloworld"<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <HelloWorld xmlns="http://sharetop/pservice" /> </soap:Body></soap:Envelope>HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <HelloWorldResponse xmlns="http://sharetop/pservice"> <HelloWorldResult>string</HelloWorldResult> </HelloWorldResponse> </soap:Body></soap:Envelope>
下面我们自己来做一个WS的客户端实例吧。先用向导生成一个HelloWorld应用,为了研究方便,我们不打算做什么界面,所有的输出都通过LOG输出到日志文件。
为了编码方便,我们增加一个类WebEngine,它应该派生于CSenBaseFragment和MSenServiceConsumer。声明如下:
class CWebEngine : public CSenBaseFragment, public MSenServiceConsumer{public:~CWebEngine();static CWebEngine* NewL();static CWebEngine* NewLC();void ConnectL();void SayHello();//from MSenServiceConsumervirtual void HandleMessageL(const TDesC8& aMessage);virtual void HandleErrorL(const TInt aErrorCode,const TDesC8& aError);virtual void SetStatus(const TInt aStatus);protected://from CSenBaseFragmentvirtual void StartElementL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const Xml::RAttributeArray& aAttrs); virtual void EndElementL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName);private:CWebEngine();void ConstructL();public:CHelloWorldResult * delegate;private:CSenServiceConnection* iConnection;CSenXmlServiceDescription* iSession;CSenXmlReader* iXmlReader;};
除了实现两个父类的方法以外,还要增加ConnectL()用来连接,SayHello()用来调用远程方法。那个delegate是一个CHelloWorldResult类的实例,这个类同样派生于CSenDomFragment,说明它对应一段XML内容,我们用它来处理结果,就是那个HelloWorldResponse标签下的内容。
这个WebEngine的实现逻辑是:先在ConnectL中初始化WS客户端,在SetStatus回调中取当前状态值如果为KSenConnectionStatusReady ,则可以调用SayHello去执行那个WS的方法,然后,在HandleMessageL回调中将得到的结果(XML内容的字节流)去解析一下,解析XML的回调就是那两个StartElement和EndElement。
附:这段代码太长了,分节吧。现在CSDN也不知怎么搞的,帖代码如此难看,唉。无语。
- Symbian学习笔记(17) - 初探WebServices API的使用(上)
- Symbian学习笔记8 之 初探WebServices API的使用(上)
- Symbian学习笔记8 之 初探WebServices API的使用(中)
- Symbian学习笔记 8 之 初探WebServices API的使用(下)
- Symbian学习笔记(18) - 初探Web Services API 的使用(中)
- Symbian学习笔记(19) - 初探Web Services API 的使用(下)
- Symbian学习笔记(14):使用Browser Control API
- Restful WebServices 学习笔记
- 我的symbian 学习笔记
- Symbian中音频API的使用
- symbian 使用 sokects API
- SMP学习笔记之使用REST API在任何操作系统上消费SMP的OData服务
- Symbian学习笔记(10):使用ListBox
- webservices使用的介绍
- WebServices学习笔记(三)复杂类型数据的传递
- [android API学习笔记]TextClock的使用
- Magento WebServices SOAP API 创建和使用
- Symbian学习笔记(15) - 解析XML文件(上)
- 虚拟现实技术术语一览
- 从菜鸟开始ubuntu
- linux SDL programme
- 一个CSS+div高度自适应布局模型
- JSP+SQL2000开发环境安装配置
- Symbian学习笔记(17) - 初探WebServices API的使用(上)
- 网页特效代码:打开层/关闭层
- CSS “点”“井号”的含义and ID class区别?
- 页面中弹出小窗口,页面背景直接变半透明
- 今天开博
- 用链接控制页面小窗口的打开和关闭
- 同志们冲啊!
- 摒弃本位意识 改善沟通效果
- 关于servlet中web.xml的一些问题