最近写了一款很low的App,用到了很多的网上资源,就需要访问远端的资源。这时Web Service就强势登场了,那么,什么是Web Service呢?
Web Service是一个独立的平台,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。依据Web Service规范实施的应用程序之间,无论他们使用的语言、平台或协议是什么,都可以互相交互数据。
Web Service是建立在通用协议的基础上,如HTTP、WSDL、UDDI、SOAP等,这些协议在操作系统、编程语言和对象模型的选择上没有任何倾向,因此有很强的生命力。
Web Service是基于HTTP协议的组件,调用请求和回应消息都可以穿过防火墙,这样就避免了更改防火墙设置,也解决了使用特殊端口进行通信时无法穿越防火墙的问题。
简单的说:Web Service就是一个应用程序,它向外暴露一个能通过Web进行调用的API,例如:http://WebXml.com.cn/对外提供了查询天气的方法,只需要在程序中调用该方法,传入一个城市即可得到相应的天气情况。
通俗的讲:Web Service平台是一套标准,定义了应用程序如何在Web上实现互操作性。通过Web Service可以easy的调用远程服务,这不关乎平台和语言。无论远端平台试运行在Windows还是运行在Linux上,也不管远端程序是使用Java、.NET还是C#语言的程序,都如同访问本地程序一样。
提到Web Service就不得不提的两个重要协议: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文档:
</span></p><p><span class="string"></span><pre name="code" class="html"> <?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://WebXml.com.cn/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="http://WebXml.com.cn/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<a href="http://www.webxml.com.cn/" mce_href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a>
<strong>国内手机号码归属地查询WEB服务</strong>,提供最新的国内手机号码段归属地数据,每月更新。<br />
使用本站 WEB 服务请注明或链接本站:<a href="http://www.webxml.com.cn/" mce_href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/
</a>感谢大家的支持!<br />
</wsdl:documentation>
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/">
<s:element name="getMobileCodeInfo">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="mobileCode" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="userID" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="getMobileCodeInfoResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="getMobileCodeInfoResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
... ...
</s:schema>
</wsdl:types>
... ...
</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的结果字符串。