`
yesjavame
  • 浏览: 687186 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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

阅读更多

很久没有学习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.1



Host: localhost



Content-Type: text/xml; charset=utf-8



Content-Length: length



SOAPAction: "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 OK



Content-Type: text/xml; charset=utf-8



Content-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 MSenServiceConsumer

	virtual void HandleMessageL(const TDesC8& aMessage);

	virtual void HandleErrorL(const TInt aErrorCode,const TDesC8& aError);

	virtual void SetStatus(const TInt aStatus);

	

protected:

	//from CSenBaseFragment

	virtual 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也不知怎么搞的,帖代码如此难看,唉。无语。

分享到:
评论

相关推荐

    Sun官方提供的纯Java的SIP开发包(JAIN-SIP-API-1.2.jar)

    Sun官方提供的纯Java的SIP开发包(JAIN-SIP-API-1.2.jar) 提供黑莓(Blackberry),塞班(Symbian)等移动平台的SIP开发。

    symbian学习笔记(超级经典-适用于初学者)

    本学习笔记旨在为初学者提供全面、细致的Symbian操作系统知识,帮助你快速入门并深入理解其工作原理。 一、Symbian系统概述 Symbian操作系统最初由英国的EPOC公司开发,后被诺基亚收购并成为其主要的操作系统平台。...

    Symbian OS End-to-End HTTP API Example

    《Symbian OS End-to-End HTTP API 示例详解》 Symbian OS 是一款历史悠久的移动操作系统,曾经广泛应用于诺基亚等手机厂商的高端设备上。...通过实践与学习,可以有效提升Symbian OS上的网络编程能力。

    Symbian学习笔记

    这部分可能详细介绍了如何在Symbian上解析XML文档,以及如何使用Web Services API进行远程数据交换,可能包括gSOAP库的使用。 20. **用gSOAP实现Web Services**: gSOAP是用于生成C++代码以访问Web Services的...

    Symbian_OS_End-To-End_HTTP_API_Example_v1_2_en

    本文档深入探讨了Symbian OS End-to-End HTTP API示例(版本1.2),它旨在为开发人员提供一个全面的框架,用于理解如何在Symbian操作系统上实现HTTP通信。这个例子不仅涵盖了基本的HTTP请求和响应处理,还展示了与...

    symbian学习笔记,全28讲

    【Symbian学习笔记概述】 Symbian操作系统是一款曾经广泛应用于智能手机的操作系统,尤其在诺基亚手机上占据主导地位。对于想要学习Symbian开发的初学者来说,理解其开发环境的搭建至关重要。本系列笔记共28讲,...

    Symbian_OS_End-to-End_HTTP_API_Example_v1_2.zip

    《Symbian OS End-to-End HTTP API 示例详解》 ...通过学习这个例子,开发者不仅可以提升在网络编程方面的技能,还能更好地适应Symbian OS的编程环境。无论是对于 Series 60 还是 Series 80 的应用开发,都能从中受益。

    塞班论坛----塞班证书签名程序

    塞班论坛是一个专门为塞班(Symbian)操作系统用户提供交流平台的社区,其中涉及了大量的技术讨论和资源分享。本文将详细介绍“塞班证书签名程序”的相关知识点,以及如何使用DOSPY签名工具v2.2.9.0627.exe来给SIS或...

    Symbian学习笔记(中国移动开发者社区).pdf

    - **官方文档**: Symbian SDK 中通常会包含许多示例代码,这些示例可以帮助开发者理解如何使用特定的功能或 API。 - **在线资源**: 除了 SDK 包含的示例外,还可以通过访问 Nokia Developer Community 等网站获取更...

    Nokia_UI_API_public_1_3_Javadoc.zip_Symbian j2me_nokia-ui_symbia

    7. **Javadoc文档**:压缩包中的"doc"文件夹包含了完整的Nokia UI API 1.3 Javadoc,它是学习和使用API的重要参考资料。Javadoc提供了每个类、方法和接口的详细描述,包括参数、返回值、异常以及使用示例,极大地...

    基于塞班平台的Small-Water游戏设计与实现

    《基于塞班平台的Small-Water游戏设计与实现》是一个典型的毕业设计项目,它涉及到的是在塞班(Symbian)操作系统上开发游戏的过程。塞班系统曾是智能手机市场的主流平台,尤其在功能手机时代,它拥有广泛的用户基础...

    塞班60 PYTHON API

    **塞班60 PYTHON API** 是一个专为Symbian操作系统设计的Python环境,简化了应用程序开发流程,并为Symbian C++ API提供了一种脚本解决方案。此文档主要介绍的是基于Python 2.2.2版本的Python for S60平台1.3.13版本...

    塞班贝拉游戏---贪吃蛇源码

    本文将深入探讨使用Java编程技术在塞班系统上实现贪吃蛇游戏的过程,旨在帮助读者理解游戏开发的基本原理和技巧。 首先,我们要明确的是,塞班系统(Symbian)是早期智能手机广泛采用的操作系统,尤其在诺基亚手机...

    symbian 学习笔记

    **Symbian操作系统详解** Symbian是一款历史悠久的智能手机操作系统,尤其在2000年至2010年间,它是全球领先的移动设备...通过深入学习和实践,开发者可以从Symbian中学到很多关于移动平台优化和资源管理的宝贵经验。

    S60平台Bluetooth API开发伙伴指南——蓝牙的结构概述

    - **连接建立**:在使用端口API建立连接之前,蓝牙设备必须先与合适的设备建立连接,这通常通过SDP协议完成。 #### 五、服务搜索(SDP) SDP协议分为两大部分: 1. **搜索可用的设备和服务**:在有效范围内搜索...

    Symbian 网络编程之使用Socket API

    Socket API是跨协议的,虽然最常见的是在TCP/IP协议栈上使用,但它也支持其他协议。Symbian的Socket服务组件不仅实现了TCP/IP,还提供了支持其他协议的模块化架构,如红外和蓝牙,这使得该组件能够随着新协议的发展...

    Python_API.tar.gz_Python A_pys60 a_python_python api中文_symbian a

    总之,"Python_API.tar.gz" 文件是一个宝贵的资源,尤其是对那些希望在 Symbian 平台上使用 Python 进行移动应用开发的开发者而言。通过深入学习和实践,开发者可以充分利用 pys60 的能力,构建出功能丰富的手机应用...

Global site tag (gtag.js) - Google Analytics