“服务调用”调解原语

使用“服务调用”调解原语可从调解流中调用服务,作为在调解流结束时使用调出机制的备用方法。

简介

在调解流内使用“服务调用”调解原语时,输入消息用于调用服务。 如果调用成功,那么响应或者由一个或多个 XPath 表达式标识的响应部分用于创建输出消息。如果调用不成功,那么可以重试同一个服务或者调用另一个服务。

在一个调解流中,可以有多个“服务调用”调解原语。因此,可以存在一系列的服务调用。可以在请求调解流或响应调解流中使用“服务调用”调解原语。

通常,通过引用操作来定义“服务调用”调解原语所调用的初始服务,引用操作是引用名称属性和操作名称属性的组合。对于子流中的“服务调用”调解原语,创建子流的实例时,会在子流上定义引用,并将其解析为父流中的引用。

“服务调用”调解原语具有一个输入终端 (in) 和多个输出终端。针对未建模的故障,有一个失败终端 (fail),并且针对每个建模故障,有一个输出终端。 已建模故障是 WSDL 文件中显式列出的故障;任何其他故障都是未建模故障。此外,还有一个用于成功服务调用的输出终端 (out),并且有一个用于某些异步调用类型的超时终端 (timeout)。出于特定原因创建的输出终端归类为动态终端。例如,WSDL 定义的故障将导致创建动态输出终端。

“服务调用”调解原语可以在缺省方式或消息扩充方式下运行。您可以从将调解原语放到画布上时打开的“选择引用操作”窗口中配置该方式:
  • 要使用缺省方式,请确保清除消息扩充方式复选框。
  • 要启用消息扩充方式,请选中消息扩充方式复选框。

详细信息(缺省方式)

在缺省方式下,在 in 终端收到的输入消息将直接传递到服务,并且来自服务调用的响应消息将直接传递到 out 终端。 响应消息的主体和头部分将传播到输出消息。

inout 终端会自动设置为与调解原语关联的接口和操作的适当消息类型。“服务调用”调解原语的输入和输出终端将通过以下方式反映引用操作:
  • in 终端的消息类型必须与引用操作的请求消息类型匹配。
  • 如果有响应消息,那么 out 终端的消息类型必须与引用操作的响应消息类型匹配。

下图显示了针对双向操作的缺省方式下的消息流。

图 1. 缺省方式下的消息传播
此图显示了如何在缺省方式下填充输出消息。

下表概述了缺省方式下调解原语的终端的操作。

表 1. 缺省方式下“服务调用”调解原语的终端
终端类型 端名称 动态终端? 消息类型 终端描述
输入 in No 操作的请求消息的 WSDL 消息类型。 接收输入消息。输入终端收到的消息 (SMO) 用于调用服务。

通过 WSDL 中指定的操作来定义服务调用。例如,您可能有一个名为 getCustomerDetails 的操作,该操作会调用客户信息服务。

输出 out 是。WebSphere® Integration Developer 为界面上的响应消息定义一个输出终端。 操作的响应消息的 WSDL 消息类型。 传播经过更新的消息。服务调用的结果用于生成发送到该终端的新消息 (SMO)。在服务调用成功时使用。

如果操作是单向的,那么该终端不存在。

输出 缺省为已建模的故障名称。 是。WebSphere Integration Developer 为界面上的每个已建模故障定义一个输出终端。 操作的故障消息的 WSDL 消息类型。 传播故障响应消息。不会将任何信息放入 failInfo 元素中。从服务调用返回相关已建模故障时使用。
输出 timeout 操作的请求消息的 WSDL 消息类型。(与输入终端相同。) 传播原始消息以及超时异常信息。超时异常信息存储在 failInfo 元素中。异步服务调用因超时失败时使用。timeout 终端不用于与回调异步的调用,仅用于与延迟响应异步的调用。

如果操作是单向的,那么该终端不存在。

失败 失败 No 操作的请求消息的 WSDL 消息类型。(与输入终端相同。) 传播原始消息以及任何异常信息。异常信息存储在 failInfo 元素中。从服务调用返回未建模的故障时使用。

详细信息(消息扩充方式)

在消息扩充方式下,在“服务调用”调解原语的 in 终端收到的输入消息的一部分将用于服务调用。通过 out 端的输出消息是通过将来自服务的响应与传递到调解原语的原始请求消息进行合并来构造的。

inout 终端的消息类型必须匹配,但最初未设置类型。连接 in 终端时,其消息类型由输入消息隐式定义,并且会将此消息类型传播到 out 终端。

下图显示了双向操作中消息流过调解原语时如何得到扩充。

图 2. 消息扩充方式下的消息传播
此图显示了如何在消息扩充方式下填充输出消息。

下表概述了消息扩充方式下调解原语的终端的操作。

表 2. 消息扩充方式下“服务调用”调解原语的终端
终端类型 端名称 动态终端? 消息类型 终端描述
输入 in No 在连接传播致使定义消息类型之前未定义。 接收输入消息。一个或多个 XPath 表达式用于抽取入站 SMO 的一部分以用作请求消息。
输出 out 是。WebSphere Integration Developer 为界面上的响应消息定义一个输出终端。 在连接传播致使定义消息类型之前未定义。 通过将来自服务的响应与传递到调解原语的原始请求消息进行合并来填充输出消息。

如果操作是单向的,那么该终端不存在。

输出 缺省为已建模的故障名称。 是。WebSphere Integration Developer 为界面上的每个已建模故障定义一个输出终端。 在连接传播致使定义消息类型之前未定义。 通过将来自服务的响应与传递到调解原语的原始请求消息进行合并来填充故障消息。不会将任何信息放入 failInfo 元素中。从服务调用返回相关已建模故障时使用。
输出 timeout 在连接传播致使定义消息类型之前未定义。 传播原始消息以及超时异常信息。超时异常信息存储在 failInfo 元素中。异步服务调用因超时失败时使用。timeout 终端不用于与回调异步的调用,仅用于与延迟响应异步的调用。

如果操作是单向的,那么该终端不存在。

失败 失败 No 在连接传播致使定义消息类型之前未定义。 传播原始消息以及任何异常信息。异常信息存储在 failInfo 元素中。从服务调用返回未建模的故障时使用。

用法

您可以使用“服务调用”调解原语来帮助控制服务重试序列。重试序列可以是以下操作的组合:
  • 向初始服务重新发送初始请求。
  • 向备用服务发送初始请求。
  • 向初始服务发送新请求。
  • 向备用服务发送新请求。
有关使用“服务调用”调解原语的更多信息,请参阅:使用模式