SOAP和WSDL初识

 

SOA是英文Service-Oriented Architecture,即面向服务架构的缩写。

这个词汇最近一两年频频出如今各类技术期刊上。可是一直以来对于SOA究竟是什么没有明确的回答;SOA有什么特色?适合用于解决哪些问题?与其余的技术有什么区别与联系?Web Service和SOA又是什么关系?SOA的出现对于软件架构设计有什么影响?本文将就上面提到的这些问题,尝试根据做者本身的理解给出SOA的定义;总结出SOA特有的三个基本特征;而后以HTTP协议为例对这些特征进行解释;最后简要的说明SOA对从此软件架构设计可能带来的影响。  
SOA定义   
下面是做者给SOA下的一个定义:
SOA是指为了解决在Internet环境下业务集成的须要,经过链接能完成特定任务的独立功能实体实现的一种软件系统架构。从这个定义中我但愿表达的前提有下面两点:   
1) 软件系统架构:SOA不是一种语言,也不是一种具体的技术而是一种软件系统架构,它尝试给出在特定环境下推荐采用的一种架构,从这个角度上来讲,它更像一种模式(Pattern)。所以它与不少已有的软件技术好比面向对象技术,是互补的而非互斥的。它们分别面向不一样的应用场景,用来知足不一样的特定需求。   

2) SOA的使用范围:需求决定同时也限制功能。SOA并非包治百病的万灵丹,它最主要的应用场合在于解决在Internet环境下的不一样商业应用之间的业务集成问题。

在下面咱们会详细讨论Internet的各类特色如何决定SOA的特色,这里咱们只须要先简单回顾一下Internet环境区别于Intranet环境的几个特色:   
a) 大量异构系统并存,计算机硬件工做方式不一样,操做系统不一样、编程语言也不一样;  
b) 大量、频繁的数据传输仍然速度缓慢而且不稳定;   
c) 版本升级没法完成,咱们根本就没法知道互联网上有哪些机器直接或者间接的使用某个服务。   

基于上面的前提,下面就让咱们一块儿看一下SOA的基本特征。   

SOA三大基本特征   
1 独立的功能实体  
在Internet这样松散的使用环境中,任何访问请求都有可能出错,所以任何企图经过Internet进行控制的结构都会面临严重的稳定性问题。SOA很是强调架构中提供服务的功能实体的彻底独立自主的能力。传统的组件技术,如.NET Remoting,EJB,COM或者CORBA,都须要有一个宿主(Host或者Server)来存放和管理这些功能实体;当这些宿主运行结束时这些组件的寿命也随之结束。这样当宿主自己或者其它功能部分出现问题的时候,在该宿主上运行的其它应用服务就会受到影响。   SOA架构中很是强调实体自我管理和恢复能力。常见的用来进行自我恢复的技术,好比事务处理(Transaction),消息队列(Message Queue),冗余部署(Redundant Deployment)和集群系统(Cluster)在SOA中都起到相当重要的做用。   

2 大数据量低频率访问   

对于.NET Remoting,EJB或者XML-RPC这些传统的分布式计算模型而言,他们的服务提供都是经过函数调用的方式进行的,一个功能的完成每每须要经过客户端和服务器来回不少次函数调用才能完成。在Intranet的环境下,这些调用给系统的响应速度和稳定性带来的影响均可以忽略不计,可是在Internet环境下这些因素每每是决定整个系统是否能正常工做的一个关键决定因素。所以SOA系统推荐采用大数据量的方式一次性进行信息交换。   

3 基于文本的消息传递   
因为Internet中大量异构系统的存在决定了SOA系统必须采用基于文本而非二进制的消息传递方式。在COM、CORBA这些传统的组件模型中,从服务器端传往客户端的是一个二进制编码的对象,在客户端经过调用这个对象的方法来完成某些功能;可是在Internet环境下,不一样语言,不一样平台对数据、甚至是一些基本数据类型定义不一样,给不一样的服务之间传递对象带来的很大困难。因为基于文本的消息自己是不包含任何处理逻辑和数据类型的,所以服务间只传递文本,对数据的处理依赖于接收端的方式能够帮忙绕过兼容性这个的大泥坑。   此外,对于一个服务来讲,Internet与局域网最大的一个区别就是在Internet上的版本管理极其困难,传统软件采用的升级方式在这种松散的分布式环境中几乎没法进行。采用基于文本的消息传递方式,数据处理端能够只选择性的处理本身理解的那部分数据,而忽略其它的数据,从而获得的很是理想的兼容性。   

HTTP协议:一个典型的SOA实现   每一项新技术都是在一些旧的技术基础上发展出来的。正如XML根本思想来自于在60年代就已经出现的早期标记性语言同样,SOA虽然这两年才出现,可是它所表达的观念应该说在网络这种分布式系统结构出现不久就已经普遍应用了。例如咱们最熟悉的HTTP协议就是一个很是典型的SOA架构设计。HTTP协议的工做过程简单叙述以下:   

1) 客户端,一般是经过浏览器,向服务器端以文本的方式发送一个请求,索取一个Web页面;   

2) 服务器端接收到这个请求以后,根据请求的内容进行处理而且返回一个符合HTML语法的文本;   

3) 客户端接收到服务器端的响应文本后调用本地的程序,一般仍是浏览器,把返回的HTML文本的内容展示出来。   

下面来看一下HTTP协议如何知足了SOA的特色:   
* 独立的功能实体:做为服务器端的Web服务器是绝对不会由于客户端的情况变化而改变的,它老是很是稳定地按照本身的内在逻辑运行,响应外部的请求,管理本身的资源和数据。这里一个很是好的例子就是Web服务器对缓存(Cache)的处理,不少Web服务器为了提升性能都或多或少的对数据进行缓存,可是缓存数据、刷新数据这些于客户端彻底无关的操做彻底由服务器端独立完成,彻底不受客户端的影响。   

* 大数据量低频率访问:对于一个HTTP请求来讲,客户端与服务器之间访问的边界很是简单:就是一个请求,一个响应,没有任何其它的信息往返。不管客户端申请的网页上除了文字以外还有什么信息,对于客户端来讲,它发出的请求只是简单的告诉Web服务器它所须要的网页的位置;至于为了生成这个网页,服务器端是否须要访问数据库,执行Servlet或者其它的CGI程序对客户端而言,都是彻底透明的。

   * 基于文本的消息传递:迄今为止兼容性最好的系统可能就是HTTP协议支撑的大部分的web应用了,咱们能够在Windows平台下用IE查看互联网上一个Linux+Apache服务器上的由Perl脚本自动生成的网页。这里的关键就是全部内容都是以格式化的文本方式传递的,无论Perl脚本如何执行,只要它的输出是符合HTML规范的网页,就能够被客户端的浏览器解释。而因为不一样的操做系统上对于相同的HTML的解释遵循相同的规范,所以不一样操做系统下仍然可以看到一致的用户界面。   咱们上面基本描述了SOA做为一种软件架构有哪些特色,下面让咱们一块儿看看Web Service与SOA的关系。   SOA与Web Service   Web Service是就如今而言最适合实现SOA的一些技术的集合,事实上最近SOA的火爆在很大程度上归功于Web Service标准的成熟和应用的普及为普遍的实现SOA架构提供了基础。下面让咱们看看Web Service中的各类协议是如何互相工做来知足SOA所需的特色的:   

* 独立的功能实体:经过UDDI的目录查找,咱们能够动态改变一个服务的提供方而无需影响客户端的应用程序配置。全部的访问都经过SOAP访问进行,只要WSDL接口封装良好,外界客户端是根本没有办法直接访问服务器端的数据的。   

* 大数据量低频率访问:经过使用WSDL和基于文本(Literal)的SOAP请求,咱们能够实现能一次性接收大量数据的接口。这里须要着重指出的是SOAP请求分文本方式和远程调用(RPC)两种方式,正如上文已经提到的,采用远程调用方式的SOAP请求并不符合这点要求。可是使人遗憾的是现有的大多数SOAP请求采用的仍然是远程调用(RPC)方式,在某些平台上,例如IBM WebSphere的早期版本,甚至没有提供文本方式的SOAP支持。   

* 基于文本的消息传递:Web Service全部的通信是经过SOAP进行的,而SOAP是基于XML的,不一样版本之间可使用不一样的DTD或者XML Schema加以辨别和区分。所以只须要咱们为不一样的版本提供不一样的处理就能够轻松实现版本控制的目标。   SOA对于软件架构设计的影响   不管您如今的系统是否牵涉到基于Internet的业务集成,采用SOA推荐的架构都对提升您系统的扩展性有很大帮助,下面是在系统中引入SOA后须要在软件架构方面作出的改变:   

* 使用基于文本方式的SOAP调用,摆脱远程调用中出现的函数参数类型等与数据无关的信息,保证全部SOAP传递的都是有意义的商业数据。依赖于Schema,而不是类定义对这些数据进行解释。   

* 传统的三层Web应用将可能变成四层结构:传统意义上的商业逻辑层将被进一步划分为存放每一个会话(Session)信息的客户逻辑层和与状态无关Sateless的SOA层。 




WSDL 

Web Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web服务通讯的XML语言。

怎样向别人介绍你的Web service有什么功能,以及每一个函数调用时的参数呢?你可能会本身写一套文档,你甚至可能会口头上告诉须要使用你的Web service的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Web service的时候,他们的工具(如Visual Studio)没法给他们提供任何帮助,由于这些工具根本就不了解你的Web service。解决方法是:用机器能阅读的方式提供一个正式的描述文档。Web service描述语言(WSDL)就是这样一个基于XML的语言,用于描述Web service及其函数、参数和返回值。由于是基于XML的,因此WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应Web service的代码。 
================================================================================================
WSDL用来提供对服务的描述 ,它的主要构成要素有五个: 
1)Types: 定义WSDL定义中所用到的数据类型,即XML Schema Types
2)Message : 对一组消息的输入和输出参数的定义
3)portType : 定义Web服务的操做
4)  Binding :描述特定服务接口的协议、数据格式、安全性和其它属性.
5)  Services : 制定特定服务的URL和提供的调用接口,包含一组端口元素
html

 

 

个人第一个WebServices程序(HelloWorld)

 

MyEclipse开发WebServices(基于Annotations)

 

 

基于XFire开发WebServices

XFire生火指南下半部
XFire 最新生火指南(上)
XFire完整入门教程
XPath详解
Java开发WebService实例--计数器
.Net/C# 与 J2EE/Java Web Service 互操做完整实例
图文并茂——使用xfire编写webservice,并经过C#调用
实施WebService Security[WS-Security1.0]的Encrypt和Sign模式(XFire+WSS4J)
XFire客户端流程分析
基于SOAP报文的纯服务端测试
相关文章
相关标签/搜索