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