经常有网友问:“在 Android 平台如何调用 WebService”?经过沟通我发现,甚至有些朋友连什么是 WebSerivce 都不知道就在问怎么使
用,更别说和 WebService 有关的 SOAP、WSDL 这类“火星”名词了。所以,我就想在讲解 Android 平台如何调用 WebSerivce 之前,
先来介绍下 WebService,看看它到底有多神秘。
记得我的硕士论文题目中就包含“Web Service”这个词,当时还是花了大量时间去研究 Web Service 在系统集成、企业应用整合方面
的应用;在工作中,接触的几个项目全都用到了 Web Service;现在在工作之余抽点时间学习 Android,又是 Web Service。看来 Web
Service 真是无处不在,有编程语言的地方,总能找到它的身影(提示:如果你以前没接触过 WebService,这里需要知道 WebService
并不是 Android 的专利,10 几年前就已经出现了)。
根据 W3C 的定义,Web Services(Web 服务)是一个用于支持网络间不同机器互操作的软件系统,它是一种自包含、自描述和模块化
的应用程序,它可以在网络中被描述、发布和调用,可以将它看作是基于网络的、分布式的模块化组件。
Web Services 是建立在通用协议的基础之上,如 HTTP、SOAP、UDDI、WSDL 等,这些协议在操作系统、编程语言和对象模型的
选择上没有任何倾向,因此有着很强的生命力。
Web Services 的优势在于提供了不同应用程序平台之间的互操作,它使得基于组件的开发和 Web 相结合的效果达到最佳。它是基于
HTTP 协议的,调用请求和回应消息都可以穿过防火墙,不需要更改防火墙的设置,这样就避免了使用特殊端口进行通信时无法穿越防
火墙的问题。
简单的理解:通常我们所说的 WebService 都是远程的某个服务器对外公开了某种服务,或者理解为对外公开了某个功能或者方法,
而我们可以通过编程来调用该服务以获得我们需要的信息。例如:www.webxml.com.cn
对外公开了手机号码归属地查询服务,我们只
需要在调用该服务时传入一个手机号段(号码),就能立即获取该号段的归属地信息。
更通俗的理解:通过使用 WebService,我们能够像调用本地方法一样去调用远程服务器上的方法。我们并不需要关心远程的那个方
法是 Java 写的,还是 PHP 或 C#写的;我们并不需要关心远程的方法是基于 Unix 平台,还是 Windows 平台,也就是说 WebService 与
平台和语言无关。
说到
有着怎么的关系? 上面已经提到,Web Services 是建立
在 HTTP、SOAP、WSDL 等通用协议的基础之上。
SOAP(Simple Object Access Protocol,简单对象访问协议)是一种轻量级的、简单的、基于 XML 的协议,被设计用于在分布式环境
中交换格式化和固化信息的简单协议。也就是说,要进行通信,进行数据访问传输,就必须依赖于一定的协议,而 SOAP 正是
WebService 通信中所依赖的一种协议。目前经常使用的 SOAP 协议有两个版本:SOAP 1.1 和 SOAP 1.2。
WSDL(Web Services Description Language,即 Web 服务描述语言)是一种用来描述 Web 服务的 XML 语言,它描述了 Web 服务的
功能、接口、参数、返回值等,便于用户绑定和调用服务。它以一种和具体语言无关的方式定义了给定 Web 服务调用和应答的相关操作
和消息。
WSDL 是我们能够实实在在看到的东西,它是一份 xml 文档,用于描述某个 WebSerivce 的方方面面。例如,上面曾提到
www.webxml.com.cn
网站提供了手机号码归属地查询的 WebSerivce,我们怎么来使用这个 WebSerivce 呢?它是基于哪个版本的
SOAP 协议?调用它需要传入什么参数?它会返回什么值?是一个字符串还是 xml 文档?这一系列的问题都能在 WSDL 中找到答案。上
面这个服务的 WSDL 地址是:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,在浏览器上访问它,你将
会看到如下所示的 xml 文档:
[xhtml]view plain copy
1. <?xmlversion="1.0"encoding="utf-8"?>
2. <wsdl:definitionsxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
3. xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
4. xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
5. xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
6. xmlns:tns="http://WebXml.com.cn/"
7. xmlns:s="http://www.w3.org/2001/XMLSchema"
8. xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
9. xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
10. targetNamespace="http://WebXml.com.cn/"
11. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
12. <wsdl:documentationxmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
13. <ahref="http://www.webxml.com.cn/"mce_href="http://www.webxml.com.cn/"target="_blank">WebXml.com.cn</a>
14. <strong>国内手机号码归属地查询 WEB 服务</strong>,提供最新的国内手机号码段归属地数据,每月更新。<br/>
15. 使用本站 WEB服务请注明或链接本站:<ahref="http://www.webxml.com.cn/"mce_href="http://www.webxml.com.cn/"targe
t="_blank">http://www.webxml.com.cn/
16. </a>感谢大家的支持!<br/>
17. </wsdl:documentation>
评论3