什么是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的需要:

  1. 基于标准访问的独立功能实体满足了松耦合要求 --- 在Web Service中所有的访问都通过SOAP进行用WSDL定义的接口封装,通过UDDI进行目录查找,可以动态改变一个服务的提供方而无需影响客户端的配置,外界客户端是根本不关心服务器端的实现的。
  2. 适合大数据量、低频率访问,符合服务大颗粒度功能 --- 基于性能和效率平衡的要求,SOA的服务提供的是大颗粒度的应用功能,而且跨系统边界的访问频率也不会像程序见函数调用那么频繁。 通过WSDL和基于文本的SOAP请求,可以实现能一次性接受处理大量数据。
  3. 基于标准的文本消息传递为异构系统提供通讯机制: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的更多相关文章

  1. 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)

    转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...

  2. Web service是什么?

    原文:http://www.ruanyifeng.com/blog/2009/08/what_is_web_service.html 我认为,下一代互联网软件将建立在Web service(也就是&q ...

  3. JAVA开发Web Service几种框架介绍

    郑重声明:此文为转载来的,出处已不知了,侵告删. 在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS( ...

  4. Web service是什么?(转)

    我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上. 我把学习笔记和学习心得,放到网志上,欢迎指正. 今天先写一个最基本的问题,Web service到 ...

  5. Web Service学习之二:Web Service(for JAVA)的几种框架

    在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所 ...

  6. 转:Web service是什么?

    作者: 阮一峰 我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上. 我把学习笔记和学习心得,放到网志上,欢迎指正. 今天先写一个最基本的问题,Web ...

  7. 《转》Web Service实践之——开始XFire

    Web Service实践之——开始XFire 一.Axis与XFire的比较XFire是与Axis2 并列的新一代WebService平台.之所以并称为新一代,因为它:1.支持一系列Web Serv ...

  8. Java主流Web Service框架介绍:CXF和Axis2

    CXF和Axis2是目前java平台上最主流的两个框架,虽然两个项目都隶属ASF,但却是基于不同思想和风格实现的,因此也各有所长.   CXF:http://cxf.apache.org/ 是由过去的 ...

  9. Web service 框架比较CXF xfire aisx2 aisx

    Web 服务框架.它还体现了从 Axis 1.x 系列获得的经验和最近两年在 Web 服务领域的发展.推出 Axis2 的主要原因之一是从速度和内存方面获得更好的性能——不过还添加了一些新特性和功能. ...

随机推荐

  1. Java编程从头开始---老妪能解

    思想导向: 今天想要分享的是最基础的东西就是如何写一个简单的代码,很多人都是小白,需要的其实并不是很高端的理论,框架和思维模式啊,设计方法啊,这些对于一个新人来说实在是好高骛远,说的那么高端,结果要学 ...

  2. 1.6getId()方法

    getId()方法的作用是取得线程的唯一标识. package com.cky.test; /** * Created by chenkaiyang on 2017/12/2. */ public c ...

  3. (转)memcached注意事项

    转自:http://www.kaifajie.cn/kaiyuan_qita/8656.html 1.   key值最大长度? memcached的key的最大长度是250个字符. 注意250是mem ...

  4. _杂谈_C语言历史

    早期的操作系统软件主要是用汇编语言(包括UNIX操作系统在内)编写的.由于汇编语言依赖于计算机硬件,所以程序的可读性和可移植性都比较差,所以呢,为了提高操作系统软件的可读性和可移植性,最好改用高级语言 ...

  5. form表单提交时action路劲问题

    项目总出现window上部署可以访问,linux下部署不能访问的问题 linux下访问action必须是全路径,可以加上“${pageContext.request.contextPath}”  便可 ...

  6. jvm虚拟机--堆内存

    reserved 保留区域 堆 所有对象实例都在这里分配内存. 是垃圾收集的主要区域("GC 堆").现代的垃圾收集器基本都是采用分代收集算法,主要思想是针对不同的对象采取不同的垃 ...

  7. expect 安装使用

    expect 命令相当于crt远程连接,可用于脚本化实现多服务器巡检功能. 一.expect 命令安装: 1.rpm 文件下载:百度云链接:http://pan.baidu.com/s/1sl1wSU ...

  8. My first paper is now available online

    A two-grid discretization scheme of non-conforming finite elements for transmission eigenvalues

  9. C# 动态创建数据库三(MySQL)

    前面有说明使用EF动态新建数据库与表,数据库使用的是SQL SERVER2008的,在使用MYSQL的时候还是有所不同 一.添加 EntityFramework.dll ,System.Data.En ...

  10. 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

    剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()- ...