一:为什么需要WebService
大家或多或少都可能听说WebService,也可能用到过。比如我们在开发项目的过程中,需要调用别的公司提供的数据,这里我们就需要使用到webserver。当前的应用程序开发逐步的呈现了两种迥然不同的倾向:1:基于浏览器的瘦客户端应用程序,2:基于浏览器的富客户端应用程序(RIA)。当然后一种技术相对来说更加的时髦一些(如现在很流行的Html5技术),这里主要讲前者。
基于浏览器的瘦客户端应用程序并不是 因为瘦客户能够提供更好的用户界面,而是因为它能够避免花在桌面应用程序发布上的高成本。发布桌面应用程序成本很高,
一半是因为应用程序安装和配置的问 题,另一半是因为客户和服务器之间通信的问题。传统的Windows富客户应用程序使用DCOM来与服务器进行通信和调用远程对象。
配置好DCOM使其在 一个大型的网络中正常工作将是一个极富挑战性的工作,同时也是许多IT工程师的噩梦。事实上,许多IT工程师宁愿忍受浏览器所带来的功能限制,
也不愿在局 域网上去运行一个DCOM。关于客户端与服务器的通信问题,一个完美的解决方法是使用HTTP协议来通信。这是因为任何运行Web浏览器的机器都在使用 HTTP协议。
同时,当前许多防火墙也配置为只允许HTTP连接。许多商用程序还面临另一个问题,那就是与其他程序的互操作性。如果所有的应用程序都是使用COM或.NET语言写的,
并且都运行在Windows平台上,那就天下太平了。然而,事实上大多数商业数据仍然在大型主机上以非关系文件(VSAM) 的形式存放,并由COBOL语言编写的大型机程序访问。
而且,目前还有很多商用程序继续在使用C++、Java、Visual Basic和其他各种各样 的语言编写。现在,除了最简单的程序之外,所有的应用程序都需要与运行在其他异构平台上
的应用程序集成并进行数据交换。这样的任务通常都是由特殊的方法, 如文件传输和分析,消息队列,还有仅适用于某些情况的的API,
如IBM的高级程序到程序交流(APPC)等来完成的。
在以前,没有一个应用程序通信标 准,是独立于平台、组建模型和编程语言的。只有通过Web Service,客户端和服务器才能够自由的用HTTP进行通信,
不论两个程序的平台和编程语言是什么。
二:WebService的含义
综上所述,WebService是一种跨编程语言和跨操作系统的远程调用技术。或者说是一种以HTTP协议为基础,通过xml进行客户端和服务器端通讯的框架或者组件。
天气预报系统、淘宝网、校内网等会把自己的服务以web service的形式暴露出来,外界可以通过Web进行调用。我们调用这个web service的应用程序就是客户端,提供webservice服务的就是服务器端。
值得注意的是,我们编写的webservice必须符合它的标准。
三:WebService的实现原理
XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。
1:XML+XSD
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,
以及服务对象的 返回结果是什么)。
XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,
又是厂商无关 的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。
XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。
例如,整形数到底代表什么?16位,32位,64位?
这 些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,
并给出了一种语言来扩展这套数据类型。WebService平台就 是用XSD来作为其数据类型系统的。
当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所 有你使用的数据类型都
必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。
2:SOAP
WebService通过HTTP发送请求和接收结果。发送的请求内容和结果内容都采用xml格式封装,并增加了一些特定的HTTP消息头,
这些特定的HTTP消息头和xml内容格式就是SOAP协议。
SOAP协议=HTTP 协议+XML数据格式
SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。
打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
3:wsdl
好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,
WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方 法可以调用,
所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,
服务是什么(服务中有哪些方法,方法接受 的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。
它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,
这将是一个很大的好处。一些最新的开发工具既能根据你的 Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的
代理类代码。
WSDL 文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,
要知道该服务的WSDL文件的地址。
WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:
1.注册到UDDI服务器,以便被人查找;
2.直接告诉给客户端调用者。
四:WebService开发
Webservice开发分为:服务端开发和客户端开发。
1:服务端开发
把公司内部系统的业务方法发布成WebService服务,供远程合作单位和个人调用。
(借助一些WebService框架可以很轻松地把自己的业务对象发布成WebService服务,
Java方面的典型WebService框架包括:axis,xfire,cxf 等,java ee服务器通常也支持发布WebService服务,例如JBoss。)
2:客户端开发
调用别人发布的WebService服务,大多数人从事的开发都属于这个方面,例如,调用天气预报WebService服务。
(使用厂 商的WSDL2Java之类的工具生成静态调用的代理类代码;
使用厂商提供的客户端编程API类;使用SUN公司早期标准的jax-rpc开发包;使用 SUN公司最新标准的jax-ws开发包。当然SUN已被ORACLE收购)
3:WebService原理
1:编写好WebService服务端后,需要向UUID服务器注册供别人使用。
2:客户端去UUID服务器上查询自己需要的WebService。
3:客户端向WebService提供者询问确切的调用方法
4:WebService服务器向客户端发送一个Wsdl文件。该WSDL文件描述了它所能提供的所有方法接口。
5:客户端了解之后,将WSDL中描述的接口方法封装成HTTP请求,发送给WebService服务器。
6:WebService服务器端响应客户端发送的HTTP请求,将处理结果以同样的SOAP报文形式通过HTTP协议发送给客户端。
参考资料:
http://www.cnblogs.com/xdp-gacl/p/4048937.html
http://blog.csdn.net/ostrichmyself/article/details/6393627