经常有网友问:“在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与平台和语言无关。

说到WebSerivce,就必须要知道SOAP和WSDL,它们到底和WebSerice有着怎么的关系?上面已经提到,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文档:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <wsdl:definitions xmlns: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:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  13. <a href="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 服务请注明或链接本站:<a href="http://www.webxml.com.cn/" mce_href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/
  16. </a>感谢大家的支持!<br />
  17. </wsdl:documentation>
  18. <wsdl:types>
  19. <s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/">
  20. <s:element name="getMobileCodeInfo">
  21. <s:complexType>
  22. <s:sequence>
  23. <s:element minOccurs="0" maxOccurs="1" name="mobileCode" type="s:string" />
  24. <s:element minOccurs="0" maxOccurs="1" name="userID" type="s:string" />
  25. </s:sequence>
  26. </s:complexType>
  27. </s:element>
  28. <s:element name="getMobileCodeInfoResponse">
  29. <s:complexType>
  30. <s:sequence>
  31. <s:element minOccurs="0" maxOccurs="1" name="getMobileCodeInfoResult" type="s:string" />
  32. </s:sequence>
  33. </s:complexType>
  34. </s:element>
  35. ... ...
  36. </s:schema>
  37. </wsdl:types>
  38. ... ...
  39. </wsdl:definitions>

看到WSDL后,我们能从中得到哪些信息呢?
           1)从第08行可以看出,该WebSerivce所基于的SOAP协议版本是SOAP1.2;
           2)从第10行可以看出,该WebSerivce的命名空间(NameSpace)是http://WebXml.com.cn/
           3)从第20行可以看出,我们查询手机号码归属地时要调用的方法名称为:getMobileCodeInfo;
           4)从第23-24行可以看出,我们调用getMobileCodeInfo方法时需要传入两个参数:mobileCode和userId;
           5)从第31行可以看出,调用getMobileCodeInfo方法后,将返回一个名为getMobileCodeInfoResult的结果字符串。
      到这里,我们已经初步认识了WebSerivce,以及SOAP和WSDL。这些知识具备后,就可以开始WebService相关的开发工作了。下一篇文章将讲解如何在Android平台编程调用上面的这个WebSerivce,并取得返回结果

Android开发之WebService介绍的更多相关文章

  1. Android开发之OkHttp介绍

    要论时下最火的网络请求框架,当属OkHttp了.自从Android4.4开始,google已经开始将源码中的HttpURLConnection替换为OkHttp,而在Android6.0之后的SDK中 ...

  2. 深入浅出Android开发之Surface介绍

    一 目的 本节的目的就是为了讲清楚Android中的Surface系统,大家耳熟能详的SurfaceFlinger到底是个什么东西,它的工作流程又是怎样的.当然,鉴于SurfaceFlinger的复杂 ...

  3. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  4. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  5. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  6. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  7. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  8. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  9. Android开发之InstanceState详解(转)---利用其保存Activity状态

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

随机推荐

  1. IntelliJ IDEA 14 利用JRebel实现热部署 二

    前言:今天下午和一个qq群里讨论JRebel时,忽然得到“自动部署”的奥秘--真有听君一席话,胜读十年书的感悟. 这是此群友的热部署博客:http://blog.csdn.net/martinkey/ ...

  2. ASP文件操作(FSO)详解

    实例一:写入文件 语法 object.CreateTextFile([要建立的文件],[如存在,是否替代]) <% Set fs =Server.CreateObject("Scrip ...

  3. iOS开发 .framework的Optional(弱引用)和Required(强引用)区别

    首先,参考文档:https://blog.stackmob.com/2013/03/objective-c-tip-of-the-month-optional-frameworks/ 强引用(Requ ...

  4. app被Rejected 的各种原因翻译

    1. Terms and conditions(法律与条款) 1.1 As a developer of applications for the App Store you are bound by ...

  5. mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc区别

    1.mysql_fetch_row  只能以索引下标取值,从0开始. 2.mysql_fetch_array 能以索引下标取值,也可以用字段名称取值. 3.mysql_fetch_object 对象方 ...

  6. PHP7 扩展之自动化测试

    在安装 PHP7 及各种扩展的过程中,如果你是用源码安装,会注意到在 make 成功之后总会有一句提示:Don't forget to run 'make test'. 这个 make test 就是 ...

  7. Spring @ Component 的作用

    1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...

  8. Linked List vs Array

    Both Arrays and Linked List can be used to store linear data of similar types, but they both have so ...

  9. keystonejs

    开始之前先确保你已经安装了Node.js 0.10+ 和MongoDB v2.4+. 要使用KeystoneJS,你需要掌握合理的Javascript知识,并熟悉数据库概念之类的基础知识,会用 nod ...

  10. 【mysql的编程专题⑤】自定义函数

    用户自定义函数(user-defined function,UDF) 是一种对mysql的扩展途径,其用法与内置函数相同 创建自定义函数 语法 create function function_nam ...