XML Web 服务基础结构

  • 格式:docx
  • 大小:88.52 KB
  • 文档页数:11

XML Web 服务基础结构Visual Studio 2005其他版本要在Web 的多样性世界里取得成功,在涉及到操作系统、对象模型和编程语言的选择时,XML Web 服务不能有任何倾向性。

同样,要使XML Web 服务像其他基于Web 的技术一样被广泛采用,必须符合下列条件:∙松耦合的:如果对两个系统的唯一要求是要理解前面提到的自我描述的文本消息,那么这两个系统就被认为是松耦合的。

另一方面,紧耦合系统要求大量自定义系统开销来进行通信,并要求系统之间有更多的了解。

∙常见的通信:大概不会有人会在现在或不远的将来构建一个无法连接到Internet 的操作系统,因此,需要提供常见的通信信道。

同样,能够将几乎所有系统或设备连接到Internet 的能力将确保这样的系统和设备可以供连接到Internet 的所有其他系统或设备使用。

∙通用数据格式:通过用现有的开放式标准而不是专用的封闭通信方法,任何支持同样的开放式标准的系统都能够理解XML Web 服务。

在采用自我描述的文本消息时,XML Web 服务及其客户端无须知道每个基础系统的构成即可共享消息,这使得自治系统和不同的系统之间能够进行通信。

XML Web 服务使用XML 实现此功能。

XML Web 服务采用的基础结构提供下列内容:定位XML Web 服务的发现机制、定义如何使用这些服务的服务描述以及通信时使用的标准连网形式。

下图显示了此基础结构的一个示例。

XML Web 服务基础结构基础结构组件角色XML Web 服务目录XML Web 服务目录提供一个用于定位其他组织提供的XML Web 服务的中心位置。

XML Web 服务目录(如UDDI 注册表)充当此角色。

XML Web 服务客户端可能参考也可能不参考XML Web 服务的目录。

XML Web 服务发现XML Web 服务发现是定位(或发现)使用Web 服务描述语言(WSDL) 描述特定XML Web 服务的一个或多个相关文档的过程。

DISCO 规范定义定位服务描述的算法。

如果XML Web 服务客户端知道服务描述的位置,则可以跳过发现过程。

XML Web 服务描述要了解如何与特定的XML Web 服务进行交互,需要提供定义该XML Web 服务支持的交互功能的服务描述。

XML Web 服务客户端必须知道如何与XML Web 服务进行交互才可以使用该服务。

XML Web 服务连网形式为实现通用的通信,XML Web 服务使用开放式连网形式进行通信,这些格式是任何能够支持最常见的Web 标准的系统都可以理解的协议。

SOAP 是XML Web 服务通信的主要协议。

请参见概念XML Web 服务概述社区内容添加常见问题创建Web Service的几点建议许多时候我们需要让Web method返回自定义类型,这样有许多好处,在平常的使用中有以下几个地方要注意:1、只有自定义类型的公共可读可写属性才能被序列化,只读属性不能被序列化,如果在方法中返回了这样的类型,是找不到只读属性的信息的;2、自定义类型必须提供无参构造器,否则会直接抛出编译时异常;3、自定义类型的方法都不会序列化到客户端。

由于本人最近刚开始深入Web service,所以请大家多多指教。

谢谢!发展历史∙2007/10/28∙shiny zhu 介绍WSDL 的内部运作介绍WSDL 的工作经历Web 服务的一个主要思想,就是未来的应用将由一组应用了网络的服务组合而成。

只要两个等同的服务使用统一标准和中性的方法在网络上宣传自己,那么从理论上说,一个应用程序就可以根据价格或者性能的标准,从两个彼此竞争的服务之中选出一个。

除此之外,一些服务允许在机器之间复制,因而可以通过把有用的服务复制到本地储存库,来提高允许运行在特定的计算机(群)上的应用程序的性能。

如果您想一想,会发现这很类似于人力劳务市场的运作。

提供工作的网站和雇佣公司为工人和老板提供中介服务,利用简历和工作描述来加快匹配过程。

如果找到了一个好的匹配,感兴趣的双方就会尝试磋商可接受的条件。

如果达成了协议,工人或者去老板那里开工,或者利用因特网和远程通信来作为代替的工作途径。

Web 服务描述语言是XML 中相当于简历的等同物-- 描述Web 服务做什么,它在哪里及如何调用它。

想知道它是什么样的,先看看Xmethods 网站上运行的货币交换服务的WSDL(请参阅参考资料)。

如果访问过/sd_ibm/CurrencyE xchangeService.wsdl,您会看到服务的顶级描述。

单击这个WSDL 的URL 地址,您就会看到在清单 1 中的WSDL 代码。

请注意,如果访问XMethods 网站,对于每个WSDL,您会看到两个版本,其中一个是特别用于IBM WSDL。

这是因为当前IBM 的WSDL 工具包中有一个错误,就是不让它处理来自于其他工具包的WSDL。

这个问题不久就会被修复;同时,我使用XMethods 为创建了一个特为本文服务的版本。

让我们来查看一下WSDL 文档中的每一部分,从<definitions>段开始。

<definitions><definitions>元素包括一个或者多个服务的定义。

大多数情况下,一个WSDL 文件定义一个单独的服务。

<definitions>标记后通常紧跟着以下属性的声明:name:这个属性是可选的,用来说明服务的主要目的。

targetNamespace:这个属性定义了关于服务信息的逻辑命名空间,并且各服务的属性值通常是不同的。

这个属性在稍后会作更进一步的讨论。

xmlns:tns:在许多的WSDL 文件中,这个命名空间并不出现(包括我们的示例),但是很快就会流行起来的。

如果出现,则被设置成targetNamespace 的值。

这个属性在稍后会作更进一步的讨论。

xmlns:soap 和xmlns:xsd:它们是标准命名空间的定义,在以后的WSDL 文档中被用作指定特定的SOAP 的信息和数据类型。

xmlns:缺省的WSDL 文档的命名空间,被设置到/wsdl/。

所有的WSDL 标记,像<definitions>、<message>和<service>都驻留在这个命名空间之内。

在<definitions>之中,有三个概念性的部分:<message>和<portType>: 服务提供什么操作。

<binding>: 操作怎样被调用。

<service>: 服务位于哪里。

除此之外,服务所使用的任何复杂数据类型必须在一个可选的<types>部分里面被定义,而<types>部分必须直接放在<message>部分之前。

因为我们的示例是简单的而且只使用原始的参数类型,因而没有<types>部分。

让我们详细的看看每一个部分。

<message>和<portType>一个<message>对应在调用者和服务之间传递的一条信息。

一个规则的有往返的远程方法调用有两条消息,一条负责请求,一条负责响应。

每一个<message>可以没有任何部分,或者有多个部分,每个部分都有一个名字和可选的类型。

当WSDL 描述一个对象时,每一个部分映射到一个方法调用的参数上。

如果一个方法返回为void,那么响应就是一条空信息。

一个<portType>对应一套单个或多个操作,而一个<operation>定义了一个特定的输入/输出消息序列。

每一个输入/输出的消息属性必须对应前面定义过的<message>的名称。

如果一个操作只指定了输入,则只是单向操作。

输出后面紧跟着输入则是请求-响应(solicit-response) 操作,单一的输入是一个通告。

当WSDL 描述一个对象时,每一个<operation>映射一个方法并且每一个<portType>映射一个Java 接口或类。

在这个示例中,getRate 操作接受了一个getRateRequest 消息作为它的输入,并返回一个getRateResponse 消息作为它的输出。

<binding><binding>对应于用特定的协议-- 如SOAP 或者CORBA -- 来实现的<portType>。

绑定的类型属性必须对应定义过的<portType>的名称。

因为WSDL 是中性的协议,所以您可以指定SOAP、CORBA、DCOM 和其它的标准协议的绑定。

如果一个服务支持不止一个协议,WSDL 应该对每一个它支持的协议都包含一个<binding>。

在示例中,<binding>部分表明使用标准的SOAP 编码进行的RPC 到HTTP 的通信。

也请注意soapAction (在最后的部分描述)在这个示例中的设置是设置成空串,并且服务的URI 被设置成"urn:xmethods-CurrencyExchange"。

<service>一个<service>是一个端口集,而<port>代表了在特定端点进行特定绑定的可用性。

端口的绑定属性必须对应于前面定义过的<binding>的名称。

在示例中,通过Xmethods 网站的CurrentExchangeBinding 绑定可访问<service>。

<documentation>任何WSDL 元素可以声明一个可选的<documentation>元素,其中包含人们可读的关于那个元素的信息。

在示例中,唯一有文档描述的元素是<service>。

对于其他的元素,例如独立操作,有文档描述也是很普通的。

使用WSDL 来生成客户端存根因为WSDL 包含了对服务接口的完整描述,所以可以使用它来创建能简化服务访问的存根。

IBM WSDL 工具包允许您为Apache SOAP 创建存根。

为了说明这个问题,让我们创建一个客户端存根,它允许我们调用在Xmethods 上建立的货币交换服务。

首先,建立一个\demo3 目录来存放这部分的所有软件。

然后通过使用浏览器的File, Save as 选项,把示例CurrentExchange的WSDL 文件保存到这个目录下。

然后通过键入下面的命令来建立客户端存根:\demo3> java com.ibm.wsdl.Main -in CurrencyExchangeService.wsdl这产生了一个叫做CurrencyExchangePortTypeProxy.java 的客户端存根类(如清单 2所示)。