Web Services相关协议与应用

 

什么是Web Services?

(1)Web Services 是应用程序组件

(2)Web Services 使用开放协议进行通信

(3)Web Services 是独立的(self-contained)并可自我描述

(4)Web Services 可通过使用UDDI来发现

(5)Web Services 可被其他应用程序使用

       Web Services 可以将应用程序转换为网络应用程序,通过 Web 进行发布、查找和使用。通过使用 Web Services,您的应用程序可以向全世界发布信息,或提供某项功能,并可以被其他应用程序使用。任何应用程序都可拥有 Web Service 组件。Web Services 的创建与编程语言的种类无关。

基本的 Web Services 平台是 XML+HTTPWeb services 使用 XML 来编解码数据,并使用 SOAP 来传输数据。

Web services 有两种类型的应用:

(1)可重复使用的应用程序组件,有一些功能是不同的应用程序常常会用到的。那么为什么要周而复始地开发它们呢?Web services 可以把应用程序组件作为服务来提供,比如汇率转换、天气预报或者甚至是语言翻译等等。比较理想的情况是,每种应用程序组件只有一个最优秀的版本,这样任何人都可以在其应用程序中使用它。

(2)连接现有的软件,通过为不同的应用程序提供一种链接其数据的途径,Web services有助于解决协同工作的问题。通过使用 Web services,您可以在不同的应用程序与平台之间来交换数据。

在这些应用中,最重要的事情是协同工作。由于所有主要的平台均可通过 Web 浏览器来访问 Web,不同的平台可以借此进行交互。为了让这些平台协同工作,Web 应用程序被开发了出来。Web 应用程序是运行在 Web 上的简易应用程序。它们围绕 Web 浏览器标准被进行构建,几乎可被任何平台之上的任何浏览器来使用。这也就是为什么它会被应用到分布式计算和网格计算中了。

Web Services 拥有三种基本的元素。它们是:SOAPWSDL 以及 UDDI。下面分别介绍这三种技术。

 

 

SOAP 是用于访问网络服务的协议。

什么是 SOAP

(1)SOAP 指简易对象访问协议

(2)SOAP 是一种通信协议

(3)SOAP 用于应用程序之间的通信

(4)SOAP 是一种用于发送消息的格式

(5)SOAP 被设计用来通过因特网进行通信

(6)SOAP 独立于平台

(7)SOAP 独立于语言

(8)SOAP 基于 XML

(9)SOAP 很简单并可扩展

(10)SOAP 允许您绕过防火墙

为什么要有SOAP?对于应用程序开发来说,使程序之间进行因特网通信是很重要的。目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM CORBA 等对象之间进行通信,但是 HTTP 不是为此设计的。RPC 会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量。通过 HTTP 在应用程序间通信是更好的方法,因为 HTTP 得到了所有的因特网浏览器及服务器的支持。SOAP 就是被创造出来完成这个任务的。

SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。

一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

(1)必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息

(2)可选的 Header 元素,包含头部信息

(3)必需的 Body 元素,包含所有的调用和响应信息

(4)可选的 Fault 元素,提供有关在处理此消息所发生错误的信息

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

(1)SOAP 消息必须用 XML 来编码

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

(3)SOAP 消息必须使用 SOAP Encoding 命名空间

(4)SOAP 消息不能包含 DTD 引用

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

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>

 

SOAPHTTP绑定:SOAP方法指的是遵守 SOAP 编码规则的 HTTP 请求/响应。即HTTP + XML = SOAP

一个 SOAP 实例

在下面的例子中,一个 GetStockPrice 请求被发送到了服务器。此请求有一个 StockName 参数,而在响应中则会返回一个 Price 参数。此功能的命名空间被定义在此地址中: "http://www.example.org/stock"

SOAP 请求:

POST /InStock HTTP/1.1

Host: www.example.org

Content-Type: application/soap+xml; charset=utf-8

Content-Length: nnn

 

<?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:Body xmlns:m="http://www.example.org/stock">

    <m:GetStockPrice>

      <m:StockName>IBM</m:StockName>

    </m:GetStockPrice>

  </soap:Body>

 

</soap:Envelope>

SOAP 响应:

HTTP/1.1 200 OK

Content-Type: application/soap+xml; charset=utf-8

Content-Length: nnn

 

<?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:Body xmlns:m="http://www.example.org/stock">

    <m:GetStockPriceResponse>

      <m:Price>34.5</m:Price>

    </m:GetStockPriceResponse>

  </soap:Body>

 

</soap:Envelope>

 

 

WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

什么是 WSDL?

(1)WSDL 指网络服务描述语言

(2)WSDL 使用 XML 编写

(3)WSDL 是一种 XML 文档

(4)WSDL 用于描述网络服务

(5)WSDL 也可用于定位网络服务

WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 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>

 

(1)WSDL 端口

<portType> 元素是最重要的 WSDL 元素。 它可描述一个 web service、可被执行的操作,以及相关的消息。 可以把 <portType> 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。

(2)WSDL 消息

<message> 元素定义一个操作的数据元素。 每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。

(3)WSDL types

<types> 元素定义 web service 使用的数据类型。 为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。

(4)WSDL Bindings

<binding> 元素为每个端口定义消息格式和协议细节。

这是某个 WSDL 文档的简化的片段:

<message name="getTermRequest">

   <part name="term" type="xs:string"/>

</message>

 

<message name="getTermResponse">

   <part name="value" type="xs:string"/>

</message>

 

<portType name="glossaryTerms">

  <operation name="getTerm">

        <input message="getTermRequest"/>

        <output message="getTermResponse"/>

  </operation>

</portType>

在这个例子中,<portType> 元素把 "glossaryTerms" 定义为某个端口的名称,把 "getTerm" 定义为某个操作的名称。操作 "getTerm" 拥有一个名为 "getTermRequest" 的输入消息,以及一个名为 "getTermResponse" 的输出消息。<message> 元素可定义每个消息的部件,以及相关联的数据类型。对比传统的编程,glossaryTerms 是一个函数库,而 "getTerm" 是带有输入参数 "getTermRequest" 和返回参数 getTermResponse 的一个函数。

绑定到 SOAP

一个 请求 - 响应 操作的例子:

<message name="getTermRequest">

   <part name="term" type="xs:string" />

</message>

 

<message name="getTermResponse">

   <part name="value" type="xs:string" />

</message>

 

<portType name="glossaryTerms">

  <operation name="getTerm">

      <input message="getTermRequest" />

      <output message="getTermResponse" />

  </operation>

</portType>

 

<binding type="glossaryTerms" name="b1">

<soap:binding style="document"

transport="http://schemas.xmlsoap.org/soap/http" />

  <operation>

    <soap:operation

     soapAction="http://example.com/getTerm" />

    <input>

      <soap:body use="literal" />

    </input>

    <output>

      <soap:body use="literal" />

    </output>

  </operation>

</binding>

binding 元素有两个属性 - name 属性和 type 属性。

name 属性定义 binding 的名称,而 type 属性指向用于 binding 的端口,在这个例子中是 "glossaryTerms" 端口。

soap:binding 元素有两个属性 - style 属性和 transport 属性。

style 属性可取值 "rpc" "document"。在这个例子中我们使用 documenttransport 属性定义了要使用的 SOAP 协议。在这个例子中我们使用 HTTP

operation 元素定义了每个端口提供的操作符。

对于每个操作,相应的 SOAP 行为都需要被定义。同时您必须如何对输入和输出进行编码。在这个例子中我们使用了 "literal"

 

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

UDDI 是一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集成。

(1)UDDI 指的是通用描述、发现与集成服务

(2)UDDI 是一种用于存储有关 web services 的信息的目录。

(3)UDDI 是一种由 WSDL 描述的 web services 界面的目录。

(4)UDDI 经由 SOAP 进行通信

UDDI 如何被使用?

假如行业发布了一个用于航班比率检测和预订的 UDDI 标准,航空公司就可以把它们的服务注册到一个 UDDI 目录中。然后旅行社就能够搜索这个 UDDI 目录以找到航空公司预订界面。当此界面被找到后,旅行社就能够立即与此服务进行通信,这样由于它使用了一套定义良好的预订界面。

UDDI 是一个跨行业的研究项目,由所有主要的平台和软件提供商驱动,比如:Dell, Fujitsu, HP, Hitachi, IBM, Intel, Microsoft, Oracle, SAP, 以及 Sun, 它既是一个市场经营者的团体,也是一个电子商务的领导者。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值