如果您是一位 Web 
              服务开发人员,您就应该确保您的服务将与任何想要使用它的消费者进行互操作。这样做的最好方法是遵循 
              WS-I 基本概要 1.0(WS-I Basic Profile 1.0)中列出的指导原则。如果您正在开发一个新的 
              Web 服务,或者您有现存的 Web 服务,则 WS-I 
              测试工具(WS-I Test Tool)提供了一种简便的方法,可以用来判断您的服务是否符合这些指导原则。在本文中,Peter 
              Brittenham 概述了 WS-I 测试工具( WS-I Test Tool)。
            
            引言
            在2003年8月,Web 服务互操作性组织(Web Services 
            Interoperability Organization,WS-I)发布了 WS-I 基本概要 
            1.0( WS-I Basic Profile 1.0)。这份概要包含核心 Web 
            服务规范的实现指导原则:XML 1.0、XML Schema 1.0、SOAP 
            1.1、WSDL 1.1 和 UDDI 2.0。这些指导原则是一组要求,定义了应该如何用这些规范来开发可互操作的 
            Web 服务。也可以用 WS-I 测试工具( WS-I Test Tool)来验证 
            Web 服务是否符合这些要求。草案版(Beta 
            测试版)的 WS-I 测试工具( WS-I Test Tool)现在就可以从 
            WS-I Web 站点(请参阅参考资料)下载,而最终版本应该会在今年的秋末发行。
            本文描述了该测试工具的基本体系结构。我们将继续推出一些后续的文章和教程,帮助您掌握如何运用这些工具来测试您用于互操作性的 
            Web 
            服务应用程序,以及在发现您的应用程序不遵循该基本概要时应该怎样去做。
            工具体系结构
            WS-I 测试工具( WS-I Test Tool)包括两个工具:监视器和分析器。监视器(monitor)提供了一种不引人注意的方式来记录 
            Web 服务消息(通过中间人(man-in-the-middle)方法)。分析器(analyzer)的作用是判断一组 
            Web 服务相关的构件是否符合 WS-I 基本概要 1.0( WS-I 
            Basic Profile 1.0)中的要求。下面是三个基本类型的构件:
            
              - 消息(message) —— 
                由监视器纪录的消息组。
              
- 描述(description) —— Web 
                服务的服务描述(它包括任何引用的 XML Schema 
                定义),如果可以找到 WSDL 文档的位置的话。
              
- 发现(discovery) —— Web 服务的UDDI 
                条目,如果UDDI 条目引用基于 WSDL 
                的服务描述的话。
图1提供了 WS-I 测试工具( WS-I 
            Test Tool)体系结构的概览。
            图1. WS-I 测试工具体系结构
            
            监视器概述
            监视器包含两种主要功能:消息拦截器(message 
            interceptor)和消息记录器(message logger)。消息拦截器拦截从服务请求者发送到 
            Web 
            服务和从返回到服务请求者的消息。记录器把拦截的消息的格式转换成标准的格式,然后把它们写出到消息日志中。通过使用这两种功能,一个监视器就可以拦截和记录来自多个 
            Web 
            服务的消息。监视器功能是由配置文件控制的,这种配置文件定义了监视器侦听传入消息的端口和监视器应该转发该消息的 
            Web 服务位置之间的关联。
            当使用监视器时,服务请求者可以查看它,就好像它是 
            Web 服务一样。所有的 SOAP 
            消息都发送到监视器而不是 Web 
            服务。由于这不是请求者的正常操作方式,所以有三种基本的方法可以这样做:
            
              - 将请求者转为指向监视器而不是 Web 服务。
              
- 将 Web 
                服务转向新的位置,并且在所在的位置运行监视器。
              
- 更改请求者所用的 Web 服务端点信息。
有几种系统配置可以用来运行监视器。其中,由四种基本的系统配置,这些配置定义了请求者、监视器和 
            Web 服务可以运行的系统。
            
              - 请求者、监视器和 Web 
                服务运行在同一个系统上。
              
- 监视器运行在与请求者相同的系统上,而 Web 
                服务运行在另外的系统上。
              
- 请求者运行在与监视器和 Web 
                服务不同的系统上。
              
- 请求者、监视器和 Web 
                服务运行在三个单独的系统上。
图2展示了监视器的所有系统配置选择。
            图2. 监视器系统配置
            
            监视器配置文件
            监视器需要一个输入文件。此文件是一个包含配置选项的 
            XML 
            文档,这些配置选项告知监视器它需要监视什么和它需要在哪里记录它拦截的消息。清单1包含一个监视器配置文件示例。
            清单1.监视器配置文件
            
              
                
                  | 
	
 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration xmlns="http://www.ws-i.org/testing/2003/03/monitorConfig/">
 3   <comment>
 4      This configuration file is used to test the LoggingFacility WS-I sample application.
 5   </comment>
 6   <logFile replace="true" location="log.xml">
 7     <addStyleSheet href="c:/wsi-test-tools/common/xsl/log.xsl" type="text/xsl"/>
 8   </logFile>
 9   <logDuration>600</logDuration>
10   <cleanupTimeoutSeconds>3</cleanupTimeoutSeconds>
11   <manInTheMiddle>
12     <redirect>
13       <comment>Redirect from port 4040 to wsi.alphaworks.ibm.com.</comment>
14       <listenPort>4040</listenPort>
15       <schemeAndHostPort>http://wsi.alphaworks.ibm.com</schemeAndHostPort>
16       <maxConnections>1000</maxConnections>
17       <readTimeoutSeconds>15</readTimeoutSeconds>
18     </redirect>
19   </manInTheMiddle>
20 </configuration>
	
 | 
              
            
            示例文档中的主要元素如下所示。 WS-I 
            监视器工具功能(WS-I Monitor Tool Function)规范中详细描述了所有的配置文件(请参阅参考资料)。
            表1
            
              
                
                  | 行号 | XML 元素 | 描述 | 元素内容 | 
                
                  | 6-8 | <logFile> | 指示应该用来记录消息的文件。 | 将把消息放入名为 log.xml 
                    的文件。 | 
                
                  | 12-18 | <redirect> | 定义监视单个服务位置的参数。 | 此示例包含两个间接的语句,所以将同时监视两个服务位置。 | 
                
                  | 14 | <listenPort> | 定义监视器侦听传入消息的端口。 | 监视器将侦听传入消息的端口 
                    4040 和 4041。 | 
                
                  | 15 | <schemeAndHostPort> | 定义应该发送消息的位置。 | 在端口 4040 
                    接收到的消息发送到端口 8080 上的本地主机(localhost),而在端口 
                    4041 接收到的消息发送到端口 80(缺省 HTTP 
                    端口)上的 uddi.ibm.com。 | 
              
            
            消息日志文件
            由监视创建的日志文件是一个 XML 
            文档。这个文件包含监视器工具的运行时信息、监视器配置信息和在监视器运行时拦截的消息。可以以 
            XML 文档的形式查看日志文件(请参阅参考资料),也可以应用样式单按照 
            HTML 格式查看它。
            分析器概述
            分析器工具通过处理一组测试断言来判断 Web 
            服务的构件是否符合基本概要(Basic Profile)。测试断言是基本概要(Basic 
            Profile)中一个或多个要求的可测试表达式。测试断言文档中列出了所有的测试断言(请参阅参考资料),测试断言文档是一个 
            XML 
            文档,其内容是按照构件类型(发现、描述和消息)划分的。
            分析器的输入包括测试断言文档的位置和对 Web 
            服务构件的引用。分析器的输出是一份一致性报告。在分析器的配置文件中指定了所有这些信息。
            分析器配置文件
            与监视器工具完全一样,分析器使用 XML 
            文档来定义它的配置选项。清单2包含分析器配置文件的示例。
            清单2. 带有 uddiReference 
            元素的分析器配置文件
            
              
                
                  | 
 1 <configuration name="Sample Basic Profile Analyzer Configuration" 
 2     xmlns="http://www.ws-i.org/testing/2003/03/analyzerConfig/">
 3   <description>
 4     This file contains a sample of the configuration file for
 5     the Basic Profile Analyzer.
 6   </description>
 7
 8   <verbose>false</verbose>
 9   <assertionResults type="all" messageEntry="true" failureMessage="true"/>
10   <reportFile replace="true" location="report.xml">
11     <addStyleSheet href="c:/wsi-test-tools/common/xsl/report.xsl" type="text/xsl"/>
12   </reportFile>	
13   <testAssertionsFile>
14     c:/wsi-test-tools/common/profiles/BasicProfileTestAssertions.xml
15   </testAssertionsFile> 
16   <logFile correlationType="endpoint">
17     log.xml
18   </logFile> 
19   <uddiReference>
20     <uddiKey type="bindingKey">22e841c0-0ef2-11d7-a725-000629dc0a53</uddiKey> 
21     <inquiryURL>http://uddi.ibm.com/ubr/inquiryapi</inquiryURL> 
22   </uddiReference> 
23 </configuration>
	
 | 
              
            
            对于上面的配置文件,需要进行分析的构件包括 
            log.xml 文件中的消息(行16到18)、此 Web 服务的 UDDI 
            条目(行19到22)和由 UDDI tModel 条目引用的 WSDL 
            文档(也就是说不是由配置文件中的条目直接引用的)。
            可以在相同的配置文件中指定对发现构件(<uddiReference> 
            元素)和描述构件(<wsdlReference> 
            元素)的引用。如果 UDDI tModel 包含对 WSDL 
            绑定元素的引用,则当指定 <uddiReference> 
            元素时,就可以处理与描述相关的测试断言。
            下列分析器配置文件展示了如何使用 <wsdlReference> 
            元素(行19到27)。这是对 WSDL 
            文档中绑定元素的引用。
            清单3. 带有 wsdlReference 
            元素的分析器配置文件
            
              
                
                  | 		
 1 <configuration name="Sample Basic Profile Analyzer Configuration" 
 2     xmlns="http://www.ws-i.org/testing/2003/03/analyzerConfig/">
 3   <description>
 4     This file contains a sample of the configuration file for
 5     the Basic Profile Analyzer.
 6   </description>
 7
 8   <verbose>false</verbose>
 9   <assertionResults type="all" messageEntry="true" failureMessage="true"/>
10   <reportFile replace="true" location="report.xml">
11     <addStyleSheet href="c:/wsi-test-tools/common/xsl/report.xsl" type="text/xsl"/>
12   </reportFile>	
13   <testAssertionsFile>
14     c:/wsi-test-tools/common/profiles/BasicProfileTestAssertions.xml
15   </testAssertionsFile> 
16   <logFile correlationType="endpoint">
17     log.xml
18   </logFile> 
19   <wsdlReference>
20     <wsdlElement type="binding" 
21        namespace="http://www.ws-i.org/SampleApplications/
SupplyChainManagement/2002-08/LoggingFacility.wsdl"> 
22      LoggingFacilitySoapBinding
23     </wsdlElement>
24     <wsdlURI>
25      http://www.ws-i.org/SampleApplications/
SupplyChainManagement/2002-08/LoggingFacility.wsdl
26     </wsdlURI>
27   </wsdlReference>  
28 </configuration>
	
 | 
              
            
            下表中描述了上面两个示例文件中的关键配置选项。WS-I 
            分析器工具功能(WS-I Analyzer Tool Function)规范中详细描述了所有的配置选项(请参阅参考资料)。
            Table 2
            
              
                
                  | 行号 | XML 元素 | 描述 | 示例内容 | 
                
                  | 10-12 | <reportFile> | 包含输出一致性报告的文件名。 | 将把一致性报告输入 
                    report.xml 文件。 | 
                
                  | 13-15 | <testAssertionFile> | 测试断言文档的位置。 | 测试断言文档位于 /wsi-test-tools/common/profiles 
                    目录中。 | 
                
                  | 16-18 | <logFile> | 消息日志文件的位置。 | 消息在名为 log.xml 
                    的文件中。 | 
                
                  | 19-22(first example file) | <uddiReference> | 应该分析的 UDDI 
                    条目。如果指定了 bindingTemplate 
                    并且它引用了带有 WSDL 引用的 tModel,则还需要分析 
                    WSDL 文件。 | UDDI 条目是带有 bindingKey 
                    值 22e841c0-0ef2-11d7-a725-000629dc0a53 的 bindingTemplate。 | 
                
                  | 19-27(second example file) | <wsdlReference> | WSDL 
                    文档中的位置和该文档中应该首先分析的元素。还将分析由指定的元素引用的所有元素。也需要分析所有类型和导入元素。 | 首先从名为 
                    LoggingFacilitySoapBinding 的绑定元素开始分析 WSDL 
                    文档。还将分析由此绑定引用的端口类型(portType)、操作和消息元素。 | 
              
            
            测试断言文档
            下图包含某个测试断言的 HTML rendering。每个测试断言都有一个惟一的标识符,并且包含需要用于理解分析器将如何处理该断言的所有信息。对于本例,测试断言标识符是 
            WSI2406。测试断言的作用是分析 WSDL 
            绑定元素,以验证当它用在 Body、 Fault、Header 和 
            Headerfault SOAP 绑定元素中时其使用属性的值是否是“文字的”。
            图3. 测试断言示例
            
            下表包含了对这个测试断言中主要组件的描述。WS-I 
            分析器工具功能(WS-I Analyzer Tool Function)规范中详细描述了测试断言文档中的所有信息(请参阅参考资料)。
            表3
            
              
                
                  | 测试断言内容 | 描述 | 样本 | 
                
                  | Entry Type | 将要分析的数据的主要类型。 | WSDL 绑定元素。 | 
                
                  | Test Type | 指示基本概要(Basic 
                    Profile)是否要求或建议一致性。 | 这个测试断言是要求的,因此,如果它失败,构件就不能进行一致性测试。 | 
                
                  | Additional Entry 
                    Types | 处理测试断言所需的数据的附加类型。与示例一样,响应消息的测试断言可能要求分析请求消息。在本例中,请求消息将作为附加的条目类型列出。 | 没有附加数据是必需的。 | 
                
                  | Prerequisites | 在能够处理这个测试断言之前必须传送的其他测试断言。 | 在能够处理这个测试断言之前 
                    WSI2073 必须有一个已传送的结果。 | 
                
                  | Profile 
                    Requirements | 对基本概要(Basic 
                    Profile)中与这个测试断言相关联的要求的引用。 | 这个测试断言是针对基本概要(Basic 
                    Profile)中 R2706 和 R2723 要求的。也考虑 R2707 
                    方面的要求。 | 
                
                  | Context | 必须有处理测试断言的条件。 | 只有当 WSDL 
                    文档包含一个绑定元素并且该绑定元素包含带有使用属性的 
                    Body、 Fault、Header 和 Headerfault SOAP 
                    绑定元素时才处理这个测试断言。 | 
                
                  | Assertion 
                    Description | 断言的描述。 | 使用属性的值必须是“文字的”。如果它不是,则这个测试文档将失败。 | 
                
                  | Failure Message | 如果测试断言失败,则该消息将显示在一致性报告中。 | 如果这个测试断言失败了,则此消息将有助于解释为什么它失败。 | 
              
            
            对一致性报告进行概要分析
            分析器的输出是一致性报告。一致性报告将包含所有被处理的测试文档的结果。实际上与消息日志文件一样,可以以 
            XML 
            文档的形式查看一致性报告文件,也可以应用样式单按照 
            HTML 
            格式查看它。测试断言结果由构件类型中的条目列出。例如,WSDL 
            文档中绑定元素的测试断言(条目)将出现在描述构件类型中。
            测试断言可以有五种可能的结果中的某一种:已传送(passed)、已失败(failed)、警告(warning)、notApplicable 
            或 missingInput。如果某个测试断言失败,则被分析的构件就不符合基本概要(Basic 
            Profile)。当使用报告的 HTML 
            视图时,断言结果是按照下表中所列的方式进行彩色编码的。
            表4
            
            HTML 格式的报告中有两个摘要是 XML 
            版本的报告文件中所没有的。整个摘要将指示特定的构件是否符合一致性。如果整个摘要结果失败,您就应该仔细分析失败的测试断言结果以判断哪一个测试断言失败。已失败的测试断言结果由条目(例如 
            WSDL 绑定元素、消息日志条目 ID等等)列出。回顾测试断言描述和相关的概要要求将有助于您理解需要更改什么以使您的 
            Web 服务符合基本概要(Basic Profile)。
            总结
            本文概述了 WS-I 测试工具( WS-I Test Tool)。这些工具给 
            Web 
            服务开发人员提供了一种简便的方法,可以用来判断他们的 
            Web 服务是否符合基本概要 1.0(Basic Profile 1.0)的要求。本系列的下一篇文章将一步一步地说明如何安装和使用这些工具。
            参考资料
            
            
              
                
                  | 关于作者 
 Peter 目前是 IBM 新兴技术组(IBM Emerging 
                    Technologies group)的 Web 服务架构师。他从2002年4月以来就一直在 
                    WS-I 组织工具,并且是 Java 版 WS-I 测试工具( 
                    WS-I Test Tool)的架构师 |