第 4 章 定义逻辑接口
摘要
逻辑服务接口使用 portType
元素来定义。
概述
逻辑服务接口使用 WSDL portType
元素来定义。portType
元素是抽象操作定义的集合。每一操作由用于完成操作所代表的事务的输入、输出和错误消息定义。当生成代码来实施 portType
元素定义的服务接口时,每个操作都会转换为一个方法,其中包含由输入、输出和合同中指定的参数定义的参数。
Process
要在 WSDL 合同中定义逻辑接口,您必须执行以下操作:
端口类型
WSDL portType
元素是逻辑接口定义中的根元素。虽然许多 Web 服务实现将 portType
元素直接映射到生成实现对象,但逻辑接口定义并不指定由实施的服务提供的确切功能。例如,名为 ticketSystem 的逻辑接口可导致销售问题单或问题清除票据实现。
portType
元素是 WSDL 文档的单元,它映射到一个绑定,用于定义由端点公开定义的服务使用的物理数据。
WSDL 文档中的每个 portType
元素都必须具有唯一的名称,该名称使用 name
属性指定,由一组操作组成,它们在 操作
元素中描述。WSDL 文档可以描述任意数量的端口类型。
操作
使用 WSDL 操作元素定义的逻辑 操作
,定义两个端点之间的交互。例如,对检查帐户平衡的请求和跨小部件的顺序可以定义为操作。
portType
元素中定义的每个操作都必须使用 name
属性指定的唯一名称。定义操作需要 name
属性。
操作消息
逻辑操作由一组元素组成,它们代表端点之间传递的逻辑消息来执行操作。可以描述操作的元素列在 表 4.1 “操作消息元素” 中。
element | 描述 |
---|---|
| 指定在发出请求时客户端端点发送到服务提供商的消息。此消息的部分对应于操作的输入参数。 |
| 指定服务供应商发送到客户端端点的消息以响应请求。此消息的部分对应于任何可由服务提供商更改的操作参数,如引用传递的值。这包括操作返回值。 |
| 指定用于在端点之间传递错误条件的消息。 |
要至少有一个 输入
或一个 输出
元素,需要一个操作。操作可以同时具有
元素,但它只能有一个。不需要操作来有任何错误元素,但可以根据需要具有任意数量的 输入和输出
故障
元素。
元素在 表 4.2 “输入和输出元素的属性” 中列出的有两个属性。
属性 | 描述 |
---|---|
| 标识消息,以便在将操作映射到 concrete 数据格式时对其进行引用。名称必须在封闭的端口类型内唯一。 |
|
指定描述正在发送或接收数据的抽象消息。 |
不需要为所有
元素指定 输入和输出
name
属性;WSDL 提供了一个基于嵌套操作名称的默认命名方案。如果操作中只有一个元素,则元素名称默认为操作的名称。如果使用
元素,则元素名称默认为操作的名称,并且分别附加了 输入和输出
Request
或 Response
。
返回值
因为 operation
元素是在操作过程中传递的数据抽象定义,所以 WSDL 不提供为操作指定的返回值。如果方法返回了一个值,它将映射到 output
元素,作为该消息的最后一个部分。
示例
例如,您可能有一个与 例 4.1 “personalInfo lookup interface” 中显示的接口类似的接口。
例 4.1. personalInfo lookup interface
interface personalInfoLookup { personalInfo lookup(in int empID) raises(idNotFound); }
这个接口可以映射到 例 4.2 “personalInfo 查找端口类型” 中的端口类型。
例 4.2. personalInfo 查找端口类型
<message name="personalLookupRequest"> <part name="empId" element="xsd1:personalLookup"/> <message/> <message name="personalLookupResponse"> <part name="return" element="xsd1:personalLookupResponse"/> <message/> <message name="idNotFoundException"> <part name="exception" element="xsd1:idNotFound"/> <message/> <portType name="personalInfoLookup"> <operation name="lookup"> <input name="empID" message="tns:personalLookupRequest"/> <output name="return" message="tns:personalLookupResponse"/> <fault name="exception" message="tns:idNotFoundException"/> </operation> </portType>