WEBSERVICE简介

 Web Service

  Web Service是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web 应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。

  技术和规则

  在构建和使用Web Service时,主要用到以下几个关键的技术和规则:

  1.XML:描述数据的标准方法.

  2.SOAP:表示信息交换的协议.

  3.WSDL:Web服务描述语言.

  4.UDDI(Universal Description, Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。

  实际上,WebService的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。由此可以看出,在以下三种情况下,使用WebService会带来极大的好处。


 

 XML

  可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

  XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。

XML去掉了之前令许多开发人员头疼的SGML的随意语法。在XML中,采用了如下的语法:

  1 任何的起始标签都必须有一个结束标签。

  2 可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<tag/ >。XML解析器会将其翻译成<tag></tag>。

  3 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如this is a samplestring。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。

  4 所有的特性都必须有值。

  5 所有的特性都必须在值的周围加上双引号。

  这些规则使得开发一个XML解析器要简便得多,而且也除去了解析SGML中花在判断何时何地应用那些奇怪语法规则上的工作。仅仅在XML出现后的前六年就衍生出多种不同的语言,包括MathML、SVG、RDF、RSS、SOAP、XSLT、XSL-FO,而同时也将HTML改进为XHTML。


 

SOAP

  SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

  SOAP 包括四个部分:

  SOAP 封装:它定义了一个框架 , 该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的。

  SOAP 编码规则:它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。

  SOAP RPC 表示:它定义了用于表示远程过程调用和应答的协定。

  SOAP 绑定:定义了一种使用底层传输协议来完成在节点间交换SOAP封装的约定。

  SOAP 消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求 / 应答的模式。所有的 SOAP 消息都使用 XML 编码。一条 SOAP 消息就是一个包含有一个必需的 SOAP 的封装包,一个可选的 SOAP 标头和一个必需的 SOAP 体块的 XML 文档。

  把 SOAP 绑定到 HTTP 提供了同时利用 SOAP 的样式和分散的灵活性的特点以及 HTTP 的丰富的特征库的优点。在HTTP 上传送 SOAP 并不是说 SOAP 会覆盖现有的 HTTP 语义,而是 HTTP 上的 SOAP 语义会自然的映射到 HTTP 语义。在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。然而,在 RPC 上使用 SOAP 并不仅限于 HTTP 协议绑定。

 

  SOAP也可以绑定到TCP和UDP协议上。

  SOAP 消息格式:

  SOAP 标头

  <SOAP-ENV: Envelope

  Attributes>

  <SOAP-ENV:Body

  Attributes>

  </SOAP-ENV:Body>

  </SOAP-ENV:Envelope>目前主要在web服务中运用。

 

  这里是一些重要的语法规则

  SOAP 消息必须用 XML 来编码

  SOAP 消息必须使用 SOAP Envelope 命名空间

  SOAP 消息不能包含 DTD 引用

  SOAP 消息不能包含 XML 处理指令

  

  SOAP在标准化消息格式环境中,可以做所有它能完成的工作。消息的主体部分 是“text/xml”形式的MIME类型,并且包含一个SOAP封套。该封套是一个XML文 档。封套包含了报头(可选的)和报文(必须有的)。封套的报文部分总是用于 最终接收的消息,而报头项目可以确定执行中间处理的目标节点。附件、二进制 数字及其他项目可以附加到报文上。SOAP提供了一种让客户端指定哪个中间处理节点必须处理报头项目的方法。由于报头与SOAP消息的主体内容是互不相关的,所以可用它们给消息添加信息,而 不会影响对消息报文的处理。例如,报头可用于为报文中包含的请求提供数字签名。在这种情形下,身份验证/授权服务器可以处理报头项目独立于报文可以剥离信息以验证签名。一旦通过验证,封套的其余部分将被传递给SOAP服务器,它将对消息的报文进行处理。深入研究一下SOAP封套,有助于明了SOAP报头和报文元素的位置和用途。

 

  SOAP用例

  Internet上某些地方的客户端应用程序使用Web服务。

  Web服务(通过SOAP)显示对象方法。

  对象方法访问Web上任意位置的远程数据。

  对这些网络命题应用传递逻辑,我们可以为Web服务和SOAP下一个总的结论:

  某些位置的客户端可以使Web上任意位置的数据。这就是所要证明的。

  下面是更加详细一点的用例。

  SOAP客户端使用UDDI注册来查找Web服务。不用直接操作WSDL,大多数情况下SOAP应用程序将硬连接到使用特定类型的端口和特定样式的绑定,并且它将 通过UDDI动态配置要调用的、与发现的Web服务匹配的服务地址。

  客户端应用程序创建SOAP消息,它是一个可执行想要的请求/响应操作的 XML文档。

  客户端把SOAP消息传送给监听SOAP请求的Web服务器上的JSP或ASP页面。

  SOAP服务器解析SOAP包并在其领域调用合适的对象方法,在SOAP文档中包

  含的参数中传递。在SOAP服务器接收消息之前,中间处理节点可以执行SOAP报 头指示的特殊功能,可视情况确定是否执行这步操作。

  请求对象执行指示的功能,并返回数据给SOAP服务器,它把响应打包到

  SOAP封套中。服务器把SOAP封套包裹在要发送回请求机器的响应对象中,如 servlet或COM对象。

  客户端接收对象,剥离出SOAP封套并把响应文档发送给最初发出请求的程 序,完成请求/响应循环。

 

  SOAP是一种基于XML的协议,它用于在分布式环境中发送消息,并执行远程过 程调用。使用SOAP,不用考虑任何特定的传输协议(尽管通常选用HTTP协议), 就能使数据序列化。用SOAP来构建平台与语言中性的互操作系统是一个好的选择。总之,SOAP和 Web服务已为在XML上构建分布式应用程序基础结构所需的一切都考虑好了。通过解决COM和Java组件对象模型之间的冲突,SOAP把多个平台在访问数据时所出现的 不兼容性问题减至最少。先把这些讨论放在一边,SOAP是一种适用于所有类型的对象实体的理想的媒介 即使对于像Brad Pitt和Edward Norton之类的好莱坞电影角色也可用作 一种通信媒介。就像在电影中一样,期待着这种新技术带来震撼世界的效果。


 

WSDL

  WSDL是Web Service的描述语言,用于描述Web Service的服务,接口绑定等。

  怎样向别人介绍你的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 文件包含以下元素:

  Type:使用某种语法(如 XML 模式)的数据类型定义(string、int)

  Message:要传递的数据

  Part:消息参数

  Operation:服务支持的操作的抽象描述

  Port Type / Interface:一个或多个端点支持的操作的抽象集。此名称已更改,因此可能会遇到两者中的任何一个。

  Binding:特定端口类型的具体协议和数据格式规范

  Port / Endpoint:绑定和网络地址的组合。此名称也已更改,因此可能会遇到两者中的任何一个。 Service:相关端点的集合,包括其关联的接口、操作、消息等。

 

  WSDL 文档是利用这些主要的元素来描述某个 web service 的:

  元素 定义

  web service 执行的操作

  <message> web service 使用的消息

  <types> web service 使用的数据类型

  <binding> web service 使用的通信协议

  一个 WSDL 文档的主要结构是类似这样的:

  <definitions>

  <types>

  definition of types........

  </types>

  <message>

  definition of a message....

  </message>

  <portType>

  definition of a port.......

  </portType>

  <binding>

  definition of a binding....

  </binding>

  </definitions>WSDL 文档可包含其它的元素,比如 extension 元素,以及一个 service 元素,此元素可把若干个 web services 的定义组合在一个单一的 WSDL 文档中。

  如需完整的语法概述,请访问 WSDL 语法 这一节。同样要记住,与服务交互所需的所有细节都位于其 WSDL 文件中。

  WSDL支持的消息交换方式?

  WSDL支持4种消息交换方式:

  1)单向(One-way):服务端接收消息;

  2)请求响应(Request-response):服务端点接收请求消息,然后发送响应消息;

  3)要求应答(Solicit-response):服务访问端发送要求消息,然后接收应答消息。

  4)通知(Notification):服务访问端点发送通知消息。


 

UDDI

  UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。UDDI,英文为 "Universal Description, Discovery and Integration",可译为“通用描述、发现与集成服务”。

  程序开发人员通过UDDI机制查找分布在互联网上的Web Service,在获取其WSDL文件后,就可以在自己的程序中以SOAP调用的格式请求相应的服务了。

  作用 用来说明一个Web服务的一些信息类型,以便帮助服务的请求者确定如下问题: WHO,WHAT,WHERE,HOW . UDDI 定义如何查找 Web 服务(及其 WSDL 文件)。UDDI 并不像 WSDL 和 SOAP 一样深入人心,因为很多时候,使用者知道 Web 服务的位置(通常位于公司的企业内部网中)。

  UDDI 列表保存在 UDDI 注册中心。每个列表可以包含以下内容:

  白页:地址、联系人和已知标识符

  黄页:基于标准分类法的行业类别

  绿页:有关业务公开的服务的技术信息

  绿页即所需的全部内容。它们可提供对服务的 WSDL 信息的访问。

 

  开放源代码UDDI实现

  ·Apache jUDDI

  ·Ruddi

  ·OpenUDDI

  开放源代码UDDI的客户端项目

  ·UDDI浏览器

  ·Apache Scout

  ·UDDI4J

  ·uddi4r

  ·UDDI: Lite

  ·Sun的JAXR参考执行JWSDP

 

posted @ 2011-11-15 16:53  飝兒  阅读(3182)  评论(0编辑  收藏  举报