深度解析WebService
WebService简介
引子
我们有没有一种方法可以在两个平台之间进行通信呢?换句话说就是我们在Linux系统下的A应用和windows系统下的B应用如何进行通信。这就用了我们本次要说的WebService。
WebService特点介绍
WebService的思想是:使得应用程序也具有Web分布式编程模型的松散耦合性。
WebService提供一个建立分布式应用的平台,使得运行在不同的操作系统和不同
的设备上的软件,或者是用不同的程序语言和不同的厂商的软件开发工具开发的软
件,所有可能的已开发和部署软件,能够利用这一平台实现分布式计算的目的。
WebService的特点
(1)WebService是自包含的,即:在客户端不需要附加任何软件,只要客户机支持xml和Http就可以了。
(2)WebService是自我描述的,即:在客户端和服务端都不需要知道除了请求响应消息的格式和内容外的任何事。
(3)WebService是跨平台和跨语言的,即:客户端和服务端均可以在不同的平台和语言环境中实现,同时,不需要为了支持WebService而修改现有代码。
(4)WebService是基于开放和标准的,即:xml和http是WebService的主要技术基础,而xml和http早就成了业界的标准了。
(5)WebService是动态的。
(6)WebService是可以组合的,即:也就是可以通过一个WebService可以访问另外一个WebService来达到组合的目的。通过组合WebService便可以将简单的WebService聚合成为更多实现复杂功能的复杂服务。
(7)WebService是松散耦合的。完全耦合了客户端和服务端。
(8)WebService提供编程访问的能力,即:可以通过编写程序来访问Web服务。
(9)WebService是基础经过考验的成熟技术上构建的。
(10)WebService提供打包现有应用程序的能力。
(11)WebService通过网络进行发布、查找和使用。
WebService到底是什么
如果简单的说呢,WebService就是一组函数库。不过和我们平时概念中的函数库又有所不同。我们平时所用的函数库要么是自己写的(在自己的程序中写一组函数库),要么是调用底层的API(操作系统API),上面两种情况有一个共同点,那就是函数库是位于客户端本地的。
而Web服务也是一组函数库的概念和上面所提到的函数库的区别就在于此,如果Web服务看做一组函数库的话,这个函数库不是在本地而是在远程机器上中。
何为Web服务?
也就是网络服务,也就是把网络上不知道地方的一些函数看做一组服务,然后我们就可以通过网络使用这些服务。官方说法是:Web服务是一种部署在Web上的对象或者是应用程序组件。
WebService体系架构
在Web服务体系中,设计到三个角色,
一个是服务的提供者,一个是服务的中介者,还有一个是服务的调用者。
同时还涉及到三类动作:发布、绑定、查询。
Web服务提供者
可以发布Web服务,并且对使用自身服务的请求进行响应。
Web服务的拥有者,它会等待其他服务或者应用程序访问自己。Web服务中介者
也称为服务代理,用来注册已经发布的Web服务的发布者,并对其进行分类,同时提供搜索服务。
简单来说的话,Web服务的中介者就是把一个Web服务的请求者和一个Web服务的提供者联系起来,充当管理角色,用UDDI实现。Web服务的请求者
也就是Web服务的使用者,它通过服务注册中心也就是Web服务中介者查找到所需的服务,再利用SOAP消息向Web服务提供者发送请求以获取服务。发布
通过发布操作,可以使Web服务提供者向Web服务中介者注册自己的功能以及访问的接口。绑定
这里就是实现让服务的请求者能够使用服务者提供的服务了。发现(查找)
使得Web服务的请求者可以通过Web服务的中介者来查找到特点的种类的Web服务。
WebService三种基本元素之SAOP
SAOP: Simple Object Access Protocol 也就是简单对象访问协议。
是一种用于访问Web服务的协议。
因为SOAP是基于xml和http的。通过xml实现消息描述,再通过http实现消息传输。
SOAP是用于程序之间进行通信的一种通信协议。
因为其是xml和http的,所以其独立于语言,独立于平台,并且因为xml的拓展性好,所以基于xml的SOAP的扩展性也不错。
通过SOAP可以非常方便的解决互联网中消息互联互通的需求,和其他的Web服务协议构建起SOA应用技术的基础。
SOAP的一个重要特点是独立于底层传输机制,Web服务应用程序可以需要选择自己的数据传输协议,可以在发送消息时来确定相应的传输协议。
由于http协议本身的一些特点和局限性,使得SAOP使用http绑定的Web服务并不能满足某些企业的需求。比如:http不是一个可靠的传输协议,所以有可能在传输过程中出现问题,然后http协议基于Request/Response模型,也就是说客户端需要等待服务端的响应,万一响应时间过长呢?基于上面这些问题,就需要选择合适的传输协议了。
WebService三种基本元素之WSDL
WSDL(Web Services Description Language)也就是Web服务描述语言。
是基于xml的用于描述Web服务以及如何访问Web服务的语言。
服务提供者通过服务描述将所有用于访问Web服务的规范传送给Web服务的请求者,要实现Web服务体系结构的松散耦合,服务描述是一个关键,不管是服务的请求者还是提供者,通过服务描述便可以不必了解对方的底层平台,编程语言等。
服务描述与底层的SOAP基础结构想结合,足以封装应用请求的应用程序和服务提供者的Web服务之间的这个细节。
-
WSDL描述了Web服务的三个基本属性
(1)服务所提供的操作
(2)如何访问服务
(3)服务位于何处(通过URL来确定)
WebService三种基本元素之UDDI
UDDI(Universal Description,Discovery and Integration),也就是通用的描述,发现与整合。
WSDL用来描述了访问特定的Web服务的一些相关的信息,可以在互联网上,或者是在企业的不同部门之间,如何来发现我们所需要得Web服务呢?而Web服务提供商又如何将自己开发的Web服务公布到因特网上呢?这就需要使用到UDDI了,UDDI是一个跨平台、跨产业的开放性架构,可以帮助Web服务提供商在互联网上发布Web服务的信息。UDDI是一种目录服务,企业可以通过UDDI来注册和搜索Web服务。简单来说,UDDI就是一个目录,只不过在这个目录中存放了一些关于Web服务的信息而已。并且UDDI通过SOAP进行通信。
开发Web服务的方式
(1)开发阶段
实现一个Web服务,使这个Web服务能响应和接收SOAP消息,定义好逻辑模块,然后再撰写WSDL文件,(开发工具自动生成)
(2)部署阶段
指定Web服务的传输协议,将Web服务注册到相应服务描述部署文件,(也可以由工具自动生成)
(3)发布阶段
将Web服务的接口和调用的地址公开给客户端调用。
常用发布的方式为基于Web提供的WSDL链接,当然UDDI也是一个选择。
WebService的优点
其实呢,前面介绍的都是关于 WebServices 的优点,在这里就只是浅要的总结一下了。
首先,WebServices 是基于 Internet 和异构平台的应用,
这样便可以方便的实现通过网络来通信,同时可以实现在不同的平台之间共享数据。
然后就是,WebServices 是基于 XML 和 HTTP 的,
也就是基于标准和开放的,基于 XML 的话,扩展性自然好,自然跨语言。
基于 HTTP 的话,自然跨平台了。
最后,再回忆一下 WebServices 是一种应用程序组件吧,这样便可以将 WebServices 重复使用了。
WebService的缺点
首先就是由于 XML 文件的难以解析,所以在使用 Web 服务的时候,会消耗较多的 CPU 和内存资源,
而后,SOAP 是基于 XML 的,所以在网络传输中传输的是 XML 文件,
但是由 XML 文件相比于二进制文件来说,要大很多,自然就会消耗更多的网络资源了。
而后,由于通过 WSDL 解耦了 Web 服务提供者和请求者,且 SOAP 消息时从发送者向接收者单向传送的,
这在一定程度上造成了 WebServices 是一种无状态服务,
尽管现在在 . Net 中可以通过 Session 来实现在客户端和服务端共享一些数据,
但是单单依靠 Session 来实现客户端和服务端的状态交互也太牵强了吧
WebServices 在数据绑定上也存在一些缺陷,
因为所有的数据在传输中都是使用的 XML 来实现的,
因此,需要在二进制数据和 XML 之间进行一个转换(通过序列化和反序列化来实现)。
而在转换过程中有可能出现语义丢失的情况。
最后就是 WebServices 的技术要求相对比较高,
因为涉及到底层的 HTTP 协议以及 SOAP ,WSDL 和 UDDL 这三大平台元素,
所以学习的曲线也是比较长的,
当然,在 . Net 中可以通过 Visual Studio 非常快速和简单的开发和访问一个 Web 服务,
但这只限于在简单的使用上,而对于本质的东西,是比较难的。