很久没有学习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) 提供黑莓(Blackberry),塞班(Symbian)等移动平台的SIP开发。
本学习笔记旨在为初学者提供全面、细致的Symbian操作系统知识,帮助你快速入门并深入理解其工作原理。 一、Symbian系统概述 Symbian操作系统最初由英国的EPOC公司开发,后被诺基亚收购并成为其主要的操作系统平台。...
《Symbian OS End-to-End HTTP API 示例详解》 Symbian OS 是一款历史悠久的移动操作系统,曾经广泛应用于诺基亚等手机厂商的高端设备上。...通过实践与学习,可以有效提升Symbian OS上的网络编程能力。
这部分可能详细介绍了如何在Symbian上解析XML文档,以及如何使用Web Services API进行远程数据交换,可能包括gSOAP库的使用。 20. **用gSOAP实现Web Services**: gSOAP是用于生成C++代码以访问Web Services的...
本文档深入探讨了Symbian OS End-to-End HTTP API示例(版本1.2),它旨在为开发人员提供一个全面的框架,用于理解如何在Symbian操作系统上实现HTTP通信。这个例子不仅涵盖了基本的HTTP请求和响应处理,还展示了与...
【Symbian学习笔记概述】 Symbian操作系统是一款曾经广泛应用于智能手机的操作系统,尤其在诺基亚手机上占据主导地位。对于想要学习Symbian开发的初学者来说,理解其开发环境的搭建至关重要。本系列笔记共28讲,...
《Symbian OS End-to-End HTTP API 示例详解》 ...通过学习这个例子,开发者不仅可以提升在网络编程方面的技能,还能更好地适应Symbian OS的编程环境。无论是对于 Series 60 还是 Series 80 的应用开发,都能从中受益。
塞班论坛是一个专门为塞班(Symbian)操作系统用户提供交流平台的社区,其中涉及了大量的技术讨论和资源分享。本文将详细介绍“塞班证书签名程序”的相关知识点,以及如何使用DOSPY签名工具v2.2.9.0627.exe来给SIS或...
- **官方文档**: Symbian SDK 中通常会包含许多示例代码,这些示例可以帮助开发者理解如何使用特定的功能或 API。 - **在线资源**: 除了 SDK 包含的示例外,还可以通过访问 Nokia Developer Community 等网站获取更...
7. **Javadoc文档**:压缩包中的"doc"文件夹包含了完整的Nokia UI API 1.3 Javadoc,它是学习和使用API的重要参考资料。Javadoc提供了每个类、方法和接口的详细描述,包括参数、返回值、异常以及使用示例,极大地...
《基于塞班平台的Small-Water游戏设计与实现》是一个典型的毕业设计项目,它涉及到的是在塞班(Symbian)操作系统上开发游戏的过程。塞班系统曾是智能手机市场的主流平台,尤其在功能手机时代,它拥有广泛的用户基础...
**塞班60 PYTHON API** 是一个专为Symbian操作系统设计的Python环境,简化了应用程序开发流程,并为Symbian C++ API提供了一种脚本解决方案。此文档主要介绍的是基于Python 2.2.2版本的Python for S60平台1.3.13版本...
本文将深入探讨使用Java编程技术在塞班系统上实现贪吃蛇游戏的过程,旨在帮助读者理解游戏开发的基本原理和技巧。 首先,我们要明确的是,塞班系统(Symbian)是早期智能手机广泛采用的操作系统,尤其在诺基亚手机...
**Symbian操作系统详解** Symbian是一款历史悠久的智能手机操作系统,尤其在2000年至2010年间,它是全球领先的移动设备...通过深入学习和实践,开发者可以从Symbian中学到很多关于移动平台优化和资源管理的宝贵经验。
- **连接建立**:在使用端口API建立连接之前,蓝牙设备必须先与合适的设备建立连接,这通常通过SDP协议完成。 #### 五、服务搜索(SDP) SDP协议分为两大部分: 1. **搜索可用的设备和服务**:在有效范围内搜索...
Socket API是跨协议的,虽然最常见的是在TCP/IP协议栈上使用,但它也支持其他协议。Symbian的Socket服务组件不仅实现了TCP/IP,还提供了支持其他协议的模块化架构,如红外和蓝牙,这使得该组件能够随着新协议的发展...
总之,"Python_API.tar.gz" 文件是一个宝贵的资源,尤其是对那些希望在 Symbian 平台上使用 Python 进行移动应用开发的开发者而言。通过深入学习和实践,开发者可以充分利用 pys60 的能力,构建出功能丰富的手机应用...