使用 PowerDesigner 9.5 创建 Web 服务
Sybase 公司PowerDesigner 总设计师Xiao Wang撰稿
Web 服务允许您以标准格式提供现有的或新增的功用,并且允许用户和使用程序从任何位置访问它们。
PowerDesigner 9.5 同时针对 Microsoft .NET 和 Java 引入了完善的 Web 服务设计和生成机制。使用 PowerDesigner 9.5,您可以专注于 Web 服务的设计,而将所有必需的生成、实现结构的任务交给 PowerDesigner 完成。
Web 服务概述
Web 服务是一种接口,它描述了在网络上可通过 SOAP 音讯进行访问的操作集合。
Web 服务的接口和部署位置(可选) 由 WSDL 说明。WSDL 是一种声明数据类型、音讯、端口类型和端口(可选)的 XML 文档。通过 WSDL,用户可以知道应该发送哪种格式的 SOAP 音讯来调用 Web 服务以及前往音讯的格式为何。
为了能使用户查找到所需的 Web 服务,服务提供者可能会在 UDDI 注册服务中发布 WSDL 文档。这样,用户就可以使用 UDDI 注册服务来搜索 Web 服务。
若要调用 Web 服务,用户可以向部署 Web 服务时所在的访问点 URL 发送 SOAP 音讯,或者使用可简化此调用过程的代理类。SOAP 音讯也是 XML 文档。
PowerDesigner 的 Web 服务功用
PowerDesigner 9.5 允许您新建 Web 服务组件、通过对 WSDL 进行反向工程来创建 Web 服务组件、浏览 UDDI 、搜索 WSDL、从 Web 服务组件的定义生成 WSDL、生成 .NET(C# 和 VB .NET)的服务器端代码、生成 .NET 的客户端代理、生成 Java(JAX-RPC 和 JAXM)的服务器端代码以及生成 Java 的客户端代理。
为了设计 Web 服务组件,PowerDesigner 使用了 UML 类图、组件图和部署图。Web 服务由组件图的组件表示,而已部署的 Web 服务则由部署图的组件实例来表示。
创建 Web 服务组件
创建 Web 服务组件有五个步骤。首先是要创建面向对象模型 (OOM)。您可以选用以下言语中的任一种:C#、Visual Basic .NET 或 Java。在此模型上会自动附加用于 WSDL 的扩展模型定义 (XEM)。XEM 定义了 WSDL 的生成模板和扩展属性。
第二步是创建类。最好是先创建一个程序组 (Package),然后再在此程序组下创建类。
第三步是使用 Web 服务导游将创建的类转换成 Web 服务组件。为此您可以右键单击该类,然后选择“创建 Web 服务组件”命令,或在选中该类后选择“工具>创建 Web服务组件”命令。图 1 显示了一个 Web 服务导游的示例。Web 服务类型可以是接口或实现。如果选择“接口”,则表明您只希望定义此 Web 组件并生成相应的 WSDL。对于 .NET,此组件类型为“标准”,其 Web 服务将通过 .asmx 文件来实现。对于 Java,此组件类型可能是“标准”、“服务程序”或“无形状会话 Bean”。这几种 Java 组件类型的实现方法分别是:“标准”类型使用 JAX-RPC、“服务程序”类型使用 JAXM,而“无形状会话 Bean”类型将使用 J2EE (JSR109) Web 服务规范。当导游结束时会创建一个组件和类。图 2 显示了组件图中的组件符号示例。
图 1 Web 服务导游
图 2 组件符号
第四步是添加 Web 方法。您需求新建一个操作 (Operation)、打开该操作的属性页、单击“Web 方法”复选框、定义参数和前往类型以及编写该操作的实现代码。图 3 显示了 Web 方法 GetStockQuote 的实现示例。
图 3 Web 方法 GetStockQuote 的实现示例
最后一步是对 WSDL 生成进行自定义。可以自定义参数和前往值的 WSDL 数据类型、操作的扩展属性以及组件的属性和扩展属性。若要检验生成的 WSDL,您可以打开组件属性页的 WSDL 选项卡。生成 WSDL 的任务可以交给 PowerDesigner 完成,也可以由您自行定义(用户定义)。如果 Web 服务组件来源于对 WSDL 的反向工程,原始的 WSDL 将得到保留。图 4 显示了一个生成的 WSDL 的示例。
图 4 生成的 WSDL 的示例
您可以在类属性页的“预览”选项卡中预览生成的实现代码。
您可以使用部署图、节点和组件实例来仿建曾经部署的 Web 服务组件。此外,还可以在“节点”中定义服务器的 URL 以及在“组件实例”中定义服务的 URL。
对 WSDL 进行反向工程
WSDL 可以仅定义 Web 服务接口,也可以同时定义接口和访问点的 URL。Web 服务接口可能被多个服务提供者用来提供相反的服务,当然,这些服务会具有不同的实现和访问点。如果拥有 WSDL 文档的文件路径或 URL,您就可以通过对它进行反向工程来创建 Web 服务组件,之后可以定义本人的实现方法或将创建的 Web 服务组件保存在库中供当前再次使用。您在查找感兴味的 WSDL 时,可以使用 UDDI 浏览器在 UDDI 注册服务中进行搜索。
为了对 WSDL 进行反向工程,需求用 C#、VB .NET 或 Java 中的任意一种言语创建 OOM。然后选择“言语>导入 WSDL”命令并输入 WSDL 文件的路径或 URL。进行反向工程之后,会在组件图中创建一个组件,同时在类图中创建一个类。所创建的类将仅包含该 Web 服务的操作信号,若想实现该 Web 服务,还需求定义这些操作的实现代码。
在 UDDI 注册服务中搜索 WSDL
如果希望搜索在 UDDI 注册服务中注册的 WSDL,请打开“导入 WSDL”窗口,然后单击“浏览 UDDI”按钮。通过“浏览 UDDI”窗口(见图 5),您可以选择 UDDI 运营商、搜索条件和搜索类型,并可以按实体名称、服务名称或 WSDL 名称进行搜索。此外,您还可以预览找到的WSDL。
图 5 “浏览 UDDI”窗口
生成 .NET 类型的 Web 服务
对于 .NET 服务器端代码,PowerDesigner 会生成一个 .asmx 文件。这种 Web 服务的实现类可以在上述的 .asmx 文件中生成,也可以在外部生成。此实现类所使用的言语可以是 C# 或者 VB .NET。在类属性页的“预览”选项卡中,可以预览 .asmx 文件和相应的实现类代码。图 6 显示了 C# 言语的 .asmx 文件示例。
图 6 C# 言语的.asmx 文件示例
PowerDesigner 还可以生成客户端代理类来简化 Web 服务的调用。为生成客户端代理类,PowerDesigner 使用了 Visual Studio .NET 附带的 wsdl.exe 程序。
若要生成 WSDL、服务器端代码和/或客户端代理,请选择“言语>生成 C# 代码”或“言语>生成 VB .NET 代码R