理解web service 和 SOA
什么是SOA?
SOA的全称为Service Oriented Architecture,即面向服务架构。这是一种架构理念。它的提出是在企业计算领域将耦合的系统划分为松耦合的无状态的服务。服务发布出来供其他服务调用,一组互相依赖的服务就构成了SOA架构下的系统。
SOA本质上是服务的集合。 服务间彼此通信,这种通信可能是简单的数据传送,也可能是两个或者更多的服务协调进行某种活动。 而所谓服务就是精确定义、封装完善、独立于其他服务所处环境和状态的函数。
虽然不同厂商或个人对SOA有着不同的理解,但是我们仍然可以从上述的定义中看到SOA的几个关键特性:粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。
即SOA是一种思想。
SOA和Web Service关系是怎样的?
SOA理念被提出之后,仅仅是概念上的,并没有落地。而当Web Servcie标准成熟和应用普及之后,SOA才真正被用在工程商。所以,几乎所有的SOA应用场合都是和Web Service绑定的,且Web Service是现在最适合实现SOA的技术,目前,我们基本认同Web Service技术在几方面体现了SOA的需要:
- 基于标准访问的独立功能实体满足了松耦合要求 --- 在Web Service中所有的访问都通过SOAP进行,用WSDL定义的接口封装,通过UDDI进行目录查找,可以动态改变一个服务的提供方而无需影响客户端的配置,外界客户端是根本不关心服务器端的实现的。
- 适合大数据量、低频率访问,符合服务大颗粒度功能 --- 基于性能和效率平衡的要求,SOA的服务提供的是大颗粒度的应用功能,而且跨系统边界的访问频率也不会像程序见函数调用那么频繁。 通过WSDL和基于文本的SOAP请求,可以实现能一次性接受处理大量数据。
- 基于标准的文本消息传递为异构系统提供通讯机制:web service所有的通讯都是通过SOAP进行的,而SOAP是基于XML的,XML是结构化的文本消息。
即SOA不是Web Servcie,而Web Service是目前最适合实现SOA的技术。
即Web Service是一套标准,可以使SOA思想用于实践。
什么是Web Service?
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。 所谓跨编程语言是说服务器端可以用java写,而客户端可以用其他语言编写,反之亦然。 而跨操作系统平台是指服务器端程序和客户端程序可以在不同的操作系统上运行。而所谓远程调用是说一台计算机a上的一个程序可以调用另外一个计算机b上的一个对象的方法,其实这就是普通的暴露接口,如腾讯qq把相关登录接口暴露出来给其他小企业用,而第三方网站可以调用这些服务功能,但这些功能的代码实际上是跑在腾讯qq上的,这就是远程调用了。
实际上,Web Service是建立可操作的分布式应用程序的新平台,是一个平台,是一套标准,它定义了应用程序如何在web上实现互操作性,你可以用任何你喜欢的语言在任何你喜欢上的平台中写web service,只要我们可以通过web service标准对这些服务进行查询和访问。
即Web Service一种跨编程语言、操作系统平台的远程调用技术。
如何实现WebService平台技术?
实现webservice有三大技术 --- XML + XSD、SOAP、WSDL。
1、XML + XSD
WebService采用http协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法、什么参数、返回结果),XML主要的优点是它与平台、厂商都是无关的。
XML解决了数据表示的问题,但是没有定义一套标准的数据类型,比如整形数代表什么? 16位还是32位? 这些细节是非常重要的,而XML Schema(XSD), 其中schema的意思就是概要,即XSD定义了一套标准的数据类型,并给出了一套语言来扩展这套数据类型,webservice平台就是使用XSD来作为数据类型系统的,当你构造一个webservice时,为了符合其标准,你所使用的数据类型就必须被转换为XSD类型。
2、SOAP
即Simple Object Access Protocol,中文就是简单对象访问协议,简称SOAP,如下就是一个SOAP:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header>
...
...
</soap:Header> <soap:Body>
...
...
<soap:Fault>
...
...
</soap:Fault>
</soap:Body> </soap:Envelope>
我们可以看到,这个SOAP不是简单的XML,而是经过SOAP标准改造之后得到的,SOAP可以在多种协议上传输,而大多数情况是绑定在HTTP协议传输的,所以就导致大多数人认为SOAP就是HTTP+XML,或者认为SOAP是HTTP post请求的一个专用版本。

WSDL
即web service description language,网络服务描述语言,简称为WSDL。 它是一门基于XML的语言。用于描述Web Service以及如何对他们进行范文。文档主要用下面几个元素来描述某个web service:
- <portType> 执行的操作
- <message> 使用的消息
- <types> 使用的数据类型
- <binding> 使用的通信协议
<wsdl:definitions
xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"
xmlns:tns="tns" xmlns:plink="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:senc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:s12env="http://www.w3.org/2003/05/soap-envelope/"
xmlns:s12enc="http://www.w3.org/2003/05/soap-encoding/"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="tns"
name="Application">
<wsdl:types>
<xs:schema targetNamespace="tns" elementFormDefault="qualified">
<xs:import namespace="http://www.w3.org/2001/XMLSchema" />
<xs:complexType name="say_hello">
<xs:sequence>
<xs:element name="name" type="xs:string"
minOccurs="" nillable="true" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="say_helloResponse">
<xs:sequence>
<xs:element name="say_helloResult" type="xs:string"
minOccurs="" nillable="true" />
</xs:sequence>
</xs:complexType>
<xs:element name="say_hello" type="tns:say_hello" />
<xs:element name="say_helloResponse"
type="tns:say_helloResponse" />
</xs:schema>
</wsdl:types>
<wsdl:message name="say_hello">
<wsdl:part name="say_hello" element="tns:say_hello" />
</wsdl:message>
<wsdl:message name="say_helloResponse">
<wsdl:part name="say_helloResponse"
element="tns:say_helloResponse" />
</wsdl:message>
<wsdl:portType name="Application">
<wsdl:operation name="say_hello" parameterOrder="say_hello">
<wsdl:input name="say_hello" message="tns:say_hello" />
<wsdl:output name="say_helloResponse"
message="tns:say_helloResponse" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="Application" type="tns:Application">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="say_hello">
<soap:operation soapAction="say_hello" style="document" />
<wsdl:input name="say_hello">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="say_helloResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="Application">
<wsdl:port name="Application" binding="tns:Application">
<soap:address location="http://10.2.70.10:7789/SOAP/?wsdl" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
对于接口来说,接口文档非常重要,它描述了如何去访问接口,WSDL可以看做web service接口的一种标准格式的文档。
UDDI
Universal Description, Discovery and Integration",可译为“通用描述、发现与集成服务”,简称UDDI。WSDL用来描述了访问特定的web service的一些相关消息,但是在互联网上,如何发现我们需要的web service呢? 这时就要用到UDDI了。
- UDDI 是一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集成。
- UDDI 指的是通用描述、发现与集成服务
- UDDI 是一种用于存储有关 web services 的信息的目录。
- UDDI 是一种由 WSDL 描述的 web services 界面的目录。
- UDDI 经由 SOAP 进行通信
- UDDI 被构建入了微软的 .NET 平台
UDDI可以帮助web服务器提供商在互联网上发布web service的信息,UDDI是一种目录服务,企业可以通过UDDI来注册和搜索web services。
通过前面的介绍可以知道: SOAP、WSDL和UDDI构成了web service的三要素。
Web Service体系结构
体系结构包括了webservice提供者、webservice中介、webservice请求者,这三者就对应了三个动作发布、绑定、查找。
webservice提供者:即发布webservice,等待其他的服务或应用程序访问自己。
webservice请求者:即通过SOAP消息向webservice提供者发送请求以获得服务。
webservice中介:即通过代理,把一个webservice请求者和一个webservice提供者联系在一起,通过UDDI实现。
总结:
web service和http是可以互相替代的,但是web service也有一些自身的优点,比如接口中实现的方法和要求参数一目了然、不用担心大小写问题、不用担心中文Urlencode问题、传递参数可以是数组对象等。
理解web service 和 SOA的更多相关文章
- 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...
- Web service是什么?
原文:http://www.ruanyifeng.com/blog/2009/08/what_is_web_service.html 我认为,下一代互联网软件将建立在Web service(也就是&q ...
- JAVA开发Web Service几种框架介绍
郑重声明:此文为转载来的,出处已不知了,侵告删. 在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS( ...
- Web service是什么?(转)
我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上. 我把学习笔记和学习心得,放到网志上,欢迎指正. 今天先写一个最基本的问题,Web service到 ...
- Web Service学习之二:Web Service(for JAVA)的几种框架
在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所 ...
- 转:Web service是什么?
作者: 阮一峰 我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上. 我把学习笔记和学习心得,放到网志上,欢迎指正. 今天先写一个最基本的问题,Web ...
- 《转》Web Service实践之——开始XFire
Web Service实践之——开始XFire 一.Axis与XFire的比较XFire是与Axis2 并列的新一代WebService平台.之所以并称为新一代,因为它:1.支持一系列Web Serv ...
- Java主流Web Service框架介绍:CXF和Axis2
CXF和Axis2是目前java平台上最主流的两个框架,虽然两个项目都隶属ASF,但却是基于不同思想和风格实现的,因此也各有所长. CXF:http://cxf.apache.org/ 是由过去的 ...
- Web service 框架比较CXF xfire aisx2 aisx
Web 服务框架.它还体现了从 Axis 1.x 系列获得的经验和最近两年在 Web 服务领域的发展.推出 Axis2 的主要原因之一是从速度和内存方面获得更好的性能——不过还添加了一些新特性和功能. ...
随机推荐
- excel 错误提示以及其他基础知识
http://wenda.tianya.cn/question/05a3d11b0e4f3c34 For i = 1 To ActiveSheet.ChartObjects.Count M ...
- Jersey RESTful WebService框架学习(五)使用@BeanParam
第一步:定义一个实体类 注意:实体类的属性需要加上FormParam注解 public class User { @FormParam("name") private String ...
- 【王者荣耀之IT大神版】铭文说明
铭文共分五级: 一级:仅有老师提供的笔记 二级:添加了自己的听课笔记 三级:添加问题+解决方案(常遇到的问题以及自己实践上遇到的问题,排位赛遇到的遗忘点) 四级:熟记铭文与并添加联想学过的知识 五级: ...
- ArcGIS的地理坐标系与大地坐标系
一直以来,总有很多朋友针对地理坐标系.大地坐标系这两个概念吃不透.近日,在网上看到一篇文章介绍它们,非常喜欢.所以在此转发一下,希望能够对制图的朋友们有所帮助. 地理坐标:为球面坐标. 参考平面地是 ...
- eclipse选中某个字段没法高亮其他相同字段
eclipse选中某个字段无法高亮其他相同字段解决办法: window >> preference >> java >> Editor >> Mark ...
- noip第2课作业
1. 大象喝水 [问题描述] 一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数).问大象至少要喝多少桶水才会解渴. 输入:输入有一行,包行两 ...
- spring中的两个数据库事务DataSourceTransactionManager 和 JtaTransactionManager区别
在spring与数据框架(mybatis或hibernate)容器的配置文件中通常会有 <!-- (事务管理)transaction manager, use JtaTransactionMan ...
- [php-pear]如何使用 PHP-PEAR安装器,以及使用 PEAR 安装扩展库
我们都知道 PHP PEAR,就是 PHP Extension and Application Respository,也就是 PHP 扩展和应用代码库. PHP 也可以通过 PEAR 安装器来进行 ...
- Winform生成安装程序时配置自启动
1.右击安装编辑程序,在“视图”菜单中,选择“注册表”. 2.创建“键”:HKCU\Software\Microsoft\Windows\CurrentVersion\Run 3.右键Run,新建“字 ...
- oracle 字符串分割函数
首先创建一个类型: CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000); 创建函数: CREATE OR REPLACE FUNC ...