web service 是一种新的web应用程序分支,他们是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。web service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他web service应用程序可以发现并调用它部署的服务。
web service是一种应用程序,它可以使用标准的互联网协议,像超文本传输协议(http)和xml,将功能纲领性地体现在互联网和企业内部网上。可将web服务视作web上的组件编程。
历史
web广泛用到的技术:
◆tcp/ip:通用网络协议,被各种设备使用
◆html:通用用户界面,可以使用html标签显示数据
◆java:写一次可以在任何地方运行的通用编程语言
◆xml :通用数据表达语言,在web上传送机构化数据的容易方法
他们的特点是其开放性,跨平台性,开放性正是web services的基础。
web发展趋势
内容更动态化
◆带宽bandwidth更便宜,易于获得
◆存储器storage更便宜,更易获得
◆普遍式计算变得更加重要:大量的设备,例如移动电话,页面,电脑,pc,已经在internet上变得普遍,平台变得更多元化,象xml这样的跨平台技术变得更重要
web services扮演什么角色?
这些趋势意味着,更加智能的处理,操作和汇总内容变得十分重要。让我们看看按照web services角度所预示的四个趋势:
◆内容更加动态:一个web service必须能合并从多个不同源来的内容,可以包括股票,天气,新闻等,在传统环境中的内容,如存货水平,购物订单或者目录信息等,都从后端系统而来
◆带宽更加便宜:web services可以分发各种类型的内容(音频,视频流等)
◆存储更便宜: web services必须能聪明地处理大量数据,意味着要使用数据库,ldap目录,缓冲,和负载平衡软件等技术保持可扩展能力
◆普遍式计算更重要:web services不能要求客户使用某一版本的windows的传统浏览器,必须支持各种设备,平台,浏览器类型,各种内容类型。
两种重要技术
要达到这样的目标,web services要使用两种技术:
◆xml xml是在web上传送结构化数据的伟大方式,web services要以一种可靠的自动的方式操作数据,html不会满足要求,而xml可以使web services十分方便的处理数据,它的内容与表示的分离十分理想
◆soap soap使用xml消息调用远程方法,这样web services可以通过http协议的post和get方法与远程机器交互,而且,soap更加健壮和灵活易用。
其他象uddi和wsdl技术与xml和soap技术紧密结合用于服务发现。
组成web service平台的这三个技术。
xml和xsd
可扩展的标记语言(xml)是web service平台中表示数据的基本格式。除了易于建立和易于分析外,xml主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。
xml解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,还是 64位?这些细节对实现互操作性都是很重要的。w3c制定的xml schema(xsd)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。web service平台就是用xsd来作为其数据类型系统的。当你用某种语言(如vb.net或c#)来构造一个web service时,为了符合web service标准,所有你使用的数据类型都必须被转换为xsd类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换 过程。
wsdl
你会怎样向别人介绍你的web service有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的web service的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的web service的时候,他们的工具(如visual studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的web service。解决方法是:用机器能阅读的方式提供一个正式的描述文档。web service描述语言(wsdl)就是这样一个基于xml的语言,用于描述web service及其函数、参数和返回值。因为是基于xml的,所以wsdl既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具 既能根据你的web service生成wsdl文档,又能导入wsdl文档,生成调用相应web service的代码。
cxf?
apache cxf = celtix + xfire,apache cxf 的前身叫 apache celtixfire,现在已经正式更名为 apache cxf 了,以下简称为 cxf。cxf 继承了 celtix 和 xfire 两大开源项目的精华,提供了对 jax-ws 全面的支持,并且提供了多种 binding 、databinding、transport 以及各种 format 的支持,并且可以根据实际项目的需要,采用代码优先(code first)或者 wsdl 优先(wsdl first)来轻松地实现 web services 的发布和使用。目前它仍只是 apache 的一个孵化项目。
apache cxf 是一个开源的 services 框架,cxf 帮助您利用 frontend 编程 api 来构建和开发 services ,像 jax-ws 。这些 services 可以支持多种协议,比如:soap、xml/http、restful http 或者 corba ,并且可以在多种传输协议上运行,比如:http、jms 或者 jbi,cxf 大大简化了 services 的创建,同时
soap是什么?
soap 是simple object access protocol(简单对象访问协议)的缩写。
soap是一个用于分布式环境的、轻量级的、基于xml进行信息交换的通信协议.
对于soap的理解:
第一步理解:soap=http+xml
第二步理解:soap把xml的使用代码化为请求和响应参数编码模式,并用http作传输。
soap是把成熟的基于http的web技术与xml的灵活性和可扩展性组合在了一起。
第三步理解:具体地讲,一个soap实现可以简单地看作遵循soap编码规则的http请求和响应。
注意:soap 是一个协议,与编程语言无关。实际上,许多语言已经开始支持 soap,如:java,c,c++以及javascript。
soap的起源?soap解决的问题?
soap最初由微软发起研究,用以解决mts/com资源消耗大,不够轻巧等问题,后逐渐被ibm等巨头接纳并加入研究,现已提交w3c,成为web service应用传输标准。soap技术主要用于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问。
soap意思是简单对象访问协议(simple object access protocol)。的确如它的名字一样,soap是很简单的。它是一个基于xml的协议,允许程序组件和应用程序彼此使用一种标准的internet协 议--http来通讯。soap是一种独立的平台,它不依赖程序语言,它是简单的,弹性的,很容易扩展的。目前,应用程序能够彼此使用一种基于dcom和 corba技术的远程过程调用(rpc)来进行相互通讯,但http不被设计为这个目的。rpc在internet上应用是非常困难的,它们会出现许多兼 容性和安全性的问题,因为防火墙和代理服务器通常都会阻断(block)这些类型的流量。应用程序之间最好的通讯方式是通过http协议,因为http是 支持所有internet浏览器和服务器的。基于这个目的,soap协议被创建出来。
soap(simple object access protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于xml的协议,它包括四个部分:soap封装(envelop),封装定义 了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;soap编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; soap rpc表示(rpc representation),表示远程过程调用和应答的协定;soap绑定(binding),使用底层协议交换信息。
虽然这四个部分都作为soap的一部分,作为一个整体定义的,但他们在功能上是相交的、彼此独立的。特别的,信封和编码规则是被定义在不同的xml命名空间(namespace)中,这样使得定义更加简单。
soa、soap?
soa到底是什么?
soa(service-oriented architecture)的定义是面向服务的架构,就是说将软件按照功能设计成一个个服务,这些服务用标准的方式定义接口、并通过标准的协议进行调用。 soa所定义的接口和调用方式是独立于编程语言和运行平台的,广义上讲soa可以基于不同的底层技术实现,比如corba和web services。但corba由于过于复杂和臃肿已很少使用,所以目前所说的soa绝大多数是基于web services技术实现。在web services的实现方式下,soa服务的接口用xml进行定义。
在soa架构下,软件开发从业务流程分析开始,使用组件化业务建模的方法识别和分析各种业务模型,将各种实践融入其中,在这个基础上建立用例,用例直接产 生bpel,这些bpel则可以被融入一个服务整合框架中,其描述了各种服务的信息,从而把esb上的各个模块统一起来,形成一个巨大的服务仓。
将中间层再进行抽离,在中间层作一个跨技术架构的元数据和业务逻辑,使之成为跨技术架构的、可长期继承、并不断积累的企业业务库和最宝贵的信息资产,也就 是面向服务的组件库,而且这个服务组件库也可以被其它企业复用,且不依赖于任何一种技术架构。夸张一点说,如果所有软件企业都使用soa架构,那么世界软 件业将会发生彻底的改变。显然,这样一个框架不是一种产品,也不仅仅是一种技术,而是一种解决问题的方法论。
soa可能应用于两个场景:第一种是业务互通互联;第二种是封闭交易系统,即将元数据和业务逻辑抽离,形成可复用。举个例子,在第一种场景中,当不同企业 之间的业务需要相互调用,这时就可能采用soa技术;在第二种场景中,在企业内部需要将系统进行迁移时,利用soa技术定义的原有数据和业务流程,可以很 快完成。
soa并不是一个新事物,it组织已经成功建立并实施soa应用软件很多年了,bea、ibm、等厂商看到了它的价值,纷纷跟进。soa的目标在于让it 变得更有弹性,以更快地响应业务单位的需求,实现实时企业(real-time enterprise,这是gartner为soa描述的愿景目标)。而bea的cio rhonda早在2001年6月
soa是在计算环境下设计、开发、应用、管理分散的逻辑(服务)单元的一种规范。这个定义决定了soa的广泛性。soa要求开发者从服务集成的角度来设计 应用软件,即使这么做的利益不会马上显现。soa要求开发者超越应用软件来思考,并考虑复用现有的服务,或者检查如何让服务被重复利用。soa鼓励使用可 替代的技术和方法(例如消息机制),通过把服务联系在一起而非编写新代码来构架应用。经过适当构架后,这种消息机制的应用允许公司仅通过调整原有服务模式 而非被迫进行大规模新的应用代码的开发,使得在商业环境许可的时间内对变化的市场条件做出快速的响应。
soa也不仅仅是一种开发的方法论--它还包含管理。例如,应用soa后,管理者可以方便的管理这些搭建在服务平台上的企业应用,而不是管理单一的应用模 块。其原理是,通过分析服务之间的相互调用,soa使得公司管理人员方便的拿到什么时候、什么原因、哪些商业逻辑被执行的数据信息,这样就帮助了企业管理 人员或应用架构师迭代地优化他们的企业业务流程、应用系统。
soa的一个中心思想就是使得企业应用摆脱面向技术的解决方案的束缚,轻松应对企业商业服务变化、发展的需要。企业环境中单个应用程序是无法包容业务用户 的(各种)需求的,即使是一个大型的erp解决方案,仍然不能满足这个需求在不断膨胀、变化的缺口,对市场快速做出反应,商业用户只能通过不断开发新应 用、扩展现有应用程序来艰难的支撑其现有的业务需求。通过将注意力放在服务上,应用程序能够集中起来提供更加丰富、目的性更强的商业流程。其结果就是,基 于soa的企业应用系统通常会更加真实地反映出与业务模型的结合。服务是从业务流程的角度来看待技术的--这是从上向下看的。这种角度同一般的从可用技术 所驱动的商业视角是相反的。服务的优势很清楚:它们会同业务流程结合在一起,因此能够更加精确地表示业务模型、更好地支持业务流程。相反我们可以看到以应 用程序为中心的企业应用模型迫使业务用户将其能力局限为应用程序的能力。
企业流程(enterprise process)是流经企业框架的空气,它赋予业务模型里的组件以生命,并更加清晰地定义了它们之间的关系。流程定义了同业务模型进行交互操作的专门方 法。例如,会计可能是企业服务系统的一个组件--但是将发票寄给客户却是一个业务流程。服务被定义用来支持业务流程,因而贯穿整个流程始终的是:各种服务 组件在流程和逻辑实现过程中的装配操作。理解业务流程是定制服务的关键所在。
有利于企业业务的集成传统的应用集成方法(点对点集成、企业消息总线或中间件的集成(eai)、基于业务流程的集成)都很复杂、昂贵,并且不灵活。这些集 成方法难于快速适应基于企业现代业务变化不断产生的需求。基于面向服务架构 (soa) 的应用开发和集成可以很好的解决其中的许多问题。
soa 描述了一套完善的开发模式来帮助客户端应用连接到服务上。这些模式定制了系列机制用于描述服务、通知及发现服务、与服务进行通信。
不同于传统的应用集成方法,在 soa 中,围绕服务的所有模式都是以基于标准的技术实现的。大部分的通信中间件系统,如 rpc、corba、dcom、ejb 和 rmi,也同样如此。可是它们的实现都不是很完美的,在权衡交互性以及标准定制的可接受性方面总是存在问题。soa 试图排除这些缺陷。因为几乎所有的通信中间件系统都有固定的处理模式,如rpc 的功能、corba 的对象等等。然而,服务既可以定义为功能,又可同时对外定义为对象、应用等等。这使得 soa 可适应于任何现有系统,并使得系统在集成时不必刻意遵循任何特殊定制。
soa 帮助企业信息系统迁移到"leave-and-layer"架构之上,这意味着在不用对现有的企业系统做修改的前提下,系统可对外提供 web 服务接口,这是因为它们已经被可以提供 web 服务接口的应用层做了一层封装,所以在不用修改现有系统架构的情况下,soa 可以将系统和应用迅速转换为服务。soa 不仅覆盖来自于打包应用、定制应用和遗留系统中的信息,而且还覆盖来自于如安全、内容管理、搜索等 it 架构中的功能和数据。因为基于 soa 的应用能很容易地从这些基础服务架构中添加功能,所以基于soa的应用能更快地应对市场变化,为使企业业务部门设计开发出新的功能应用。(素材:程序猿的内心独白:配图来自网络,权利归原作所有,特别感谢)