为了在网络多样性方面取得成功,XML Web服务必须不关心所选择的操作系统、对象模型和程序语言。而且,XML Web服务为了和其他基于Web的技术一样被广泛接受,它们必须:
松散耦联:如果两个系统中,只有使用的命令能理解前面提到过的自我描述基于文本的消息,那么这两个系统就被认为是松散耦联的。而另一方面,紧密耦联的系统使用大量的定制的软件来增强系统间的通讯,并且需要对系统之间了解的更多。
无所不在的通信:现在个人不太可能能够构造一个操作系统,或者在近期内也不会整合接入因特网的能力,所以这就要求提供一个无所不在的通信渠道。同样,把几乎任何系统和设备连接到因特网的能力将确保这样的系统和设备能够被连接到因特网的其他的系统或设备使用。
通用的数据格式:通过采用现有的开放标准而不是专用的闭环式通信方法,任何系统都能支持能够理解XML Web服务的相同的开放标准。使用自我描述的基于文本的消息,XML Web服务和它们的客户可以共享这些消息,而不必知道每个底层系统的组成,这将能够在独立的完全不同的系统之间通信。XML Web服务使用XML来实现这个功能。
XML Web服务使用一个提供下列功能的基础结构:一个发现机制,用于定位XML Web服务;一个服务描述,用于定义如何使用这些服务;以及用来通信的标准连接格式。下列插图显示了这个基础结构的一个实例。
XML Web服务基础结构
基础结构块职能
XML Web服务目录XML Web服务目录提供一个中央地址,用于定位其他组织提供的XML Web服务。象UDDI登记这样的XML Web服务目录实现这个职能。XML Web服务的客户端可以引用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服务目录
和使用因特网上任何其他的资源一样,XML Web服务目录如果没有某些查找方法的话,它是不可能够找到一个特定的XML Web服务的。XML Web服务目录提供了中央地址,可以让XML Web服务供应者在其上发布他们提供的XML Web服务的信息。这样的目录甚至可以是XML Web服务本身,可以编程访问并且提供搜索结果来响应XML Web服务客户端的查询。使用一个XML Web服务目录来定位一个提供XML Web服务作为特定目的的组织,或者判断一个特定组织提供了什么XML Web服务,这可能是非常必要的。
UDDI(统一描述发现和集成规范)规格定义了一个标准方法来发布和发现XML Web服务的信息。与UDDI关联的XML模式定义了四个信息类型,能让开发者使用一个发布的XML Web服务。这些是:商业信息、服务信息、绑定信息和其他用于服务的规范的信息。
作为UDDI工程的核心组件,UDDI Business Registry(业务登记)允许业务编程定位其他组织发布的XML Web服务的信息。开发者可以使用UDDI Business Registry来定位发现文件和服务描述。更多信息,请看UDDI Web站点(http://uddi.microsoft.com)。
XML Web服务发现
XML Web服务发现是使用Web服务描述语言WSDL定位或发现一个或多个描述特定的XML Web服务的文件的操作。它让XML Web服务客户端得知一个XML Web服务是否存在并且到哪里找到这个XML Web服务的描述文件。
一个发布的.disco文件,是包含连接到其他描述XML Web服务的资源的XML文件,能够编程发现一个XML Web服务。下面的代码给出了一个发现文件的结构的例子:
<?xml version="1.0" encoding="utf-8" ?>
<discovery xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.xmlsoap.org/disco/">
<contractRef ref="http://www.contoso.com/Counter.asmx?wsdl" docRef="http://www.contoso.com/Counter.asmx"
xmlns="http://schemas.xmlsoap.org/disco/scl/" />
<soap address="http://www.contoso.com/Counter.asmx" xmlns:q1="http://tempuri.org/" binding="q1:CounterSoap"
xmlns="http://schemas.xmlsoap.org/disco/soap/" />
</discovery>
注意:发现文档是一个元素容器,一般包含到提供用于XML Web服务的发现信息的资源的链接。如果关联的是URL,它们假定关联到发现文档的位置。
然而,一个实现XML Web服务的Web站点不必支持发现。另一个站点可以负责描述这个服务,例如一个XML Web服务目录。没有一种公共的方法用来发现服务,例如当你创建一个私人使用的服务时。
XML Web服务描述
XML Web服务基础结构创建在使用遵循一个公布的服务描述的基于XML的消息的通信的基础上。服务描述是一个使用WSDL语言的XML语法编写的XML文档,定义了XML Web服务能理解的XML Web服务消息格式。服务描述起一个协定的作用,用来定义一个XML Web服务的行为并且指示潜在的客户如何与之交互。XML Web服务的行为取决于服务定义和支持的消息类型。