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