什么是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. HTMLDocument的变化

    H5扩展了一些新的功能 1.readyState 属性的两个属性值 loading 正在加载文档 complete 已经加载完文档 可以根据对象的状态触动触发函数 2.兼容模式 IE6开始区分渲染页面 ...

  2. 20155205 《Java程序设计》实验二(Java面向对象程序设计)实验报告

    20155205 <Java程序设计>实验二(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)单元测试 (1)三种代码 举例:我们要在一个MyUtil类中解决一个百分制成绩转 ...

  3. MFC源码实现文件对照表

    CDocManager类[实现文件] /SRC/DOCTEMPL.CPP CSingleDocTemplate类[实现文件] /SRC/DOCSINGL.CPP CWinApp::OnFileOpen ...

  4. MIT Molecular Biology 笔记3 DNA同源重组

    视频  https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...

  5. (多重背包)hdu--2191--悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

    Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品, ...

  6. Java并发编程:线程池的使用(转载)

    文章出处:http://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...

  7. codeforces 877e

    E. Danil and a Part-time Job time limit per test 2 seconds memory limit per test 256 megabytes input ...

  8. 马士兵hibernate(原始笔记)

    马士兵hibernate(原始笔记) 课程内容 1        HelloWorld a)   Xml b)   annotation 2        Hibernate原理模拟 - 什么是O/R ...

  9. hdu 5084 前缀和预处理

    http://acm.hdu.edu.cn/showproblem.php?pid=5084 给出矩阵M,求M*M矩阵的r行c列的数,每个查询跟前一个查询的结果有关. 观察该矩阵得知,令ans = M ...

  10. linux-python在vim下的自动补全功能

    linux-python在vim下的自动补全功能 安装配置: wget https://github.com/rkulla/pydiction/archive/master.zipunzip -q m ...