在此方案中,代理调用现有的 Web service 实现。

符号的关键字:

可能的用户
- 您具有消息流,并且希望它使用已作为 Web service 提供的函数。
- 您具有现有的 Web service,并且您想要为它提供其他接口。这可能是备用的 Web service 接口或 WebSphere MQ 接口。
- 您具有现有的 Web service,并且您想要以某种方式更改其实现,但不更改其接口;即,代理充当到 Web service 的媒介。例如,消息流可以用于启用审计,或将 Web service 响应透明传播到另一个应用程序上。
设计步骤
- 导入 WSDL 以创建包含 SOAP 消息定义的消息集,其中 SOAP 消息由 WSDL 进行描述。
- 创建消息流以调用 Web service。如果 Web service 的传输机制是 HTTP,则将使用 HTTPrequest 节点。如果 Web service 的传输机制是 JMS,则将使用相应的 JMS 或 WebSphere MQ 节点。
运行时
您的消息流创建格式正确的 Web service 请求,调用 Web service,并解析该 Web service 响应。
示例 1
在该示例中,代理充当 Web service 的媒介。
- 创建具有以下节点的消息流:HTTPInput、HTTPRequest 和 HTTPReply。
- Web Service 客户机生成 Web service 请求。代理将该请求传递到 HTTPInput 节点中。
- 消息流以某种方式处理该消息。
- HTTPRequest 节点将请求发送到原始 Web service,并接收响应。
- 该流生成 Web service 响应,并将它放入 HTTPReply 节点。该响应可能全部或部分基于 HTTPRequest 节点接收到的响应。
- 代理将响应发送到 Web service 客户机。
如果为 WebSphere MQ 启用的另一个应用程序需要另一种格式的信息,消息流可以安排将该消息首先传播到 MQOutput 节点以传输到该应用程序,然后再依次传播到流的终点和 HTTPReply 节点,后者发送所需的 Web service 响应。这将需要使用适当的 Compute 节点来转换消息(如果需要)和处理消息头(例如,添加 MQMD 头)。
示例 2
在该示例中,代理提供对 Web service 的审计。
- 您设计将包含 HTTPInput 节点的消息流连接到 Warehouse 节点。
- 从 Web service 客户机接收的输入消息由 Warehouse 节点存储在数据库中。
- Warehouse 节点将消息传递到 HTTPRequest 节点上,该节点与 Web service 交互。
- 当接收到响应时,HTTPRequest 节点将响应传播到 HTTPReply 节点上。
- HTTPReply 节点为 Web service 客户机生成响应。
示例 3
- WebSphere MQ 流与 Web service 交互
- 设计通过 HTTP 连接访问 Web service 的 WebSphere MQ 消息流。例如,您创建支持公司的人力资源部门流程的消息流。该流程必须检索雇员标识号并使用该信息增强该消息。雇员标识在公司的雇员目录中维护,可从 Web service 访问该目录。

在本方案中,通常会取消选中 HTTPRequest 节点属性中的用 Web service 响应替换输入消息复选框,并将来自公司目录服务器的响应放入消息树中的临时位置(该位置由同一节点的树中的响应消息位置属性指定)。在 Compute2 中编写 ESQL 用于对结果进行解包,并适当增大最终消息。
示例 4
- 消息流充当 Web service 媒介
- 设计与 Web service 交互的消息流,该 Web service 已代表不知道新接口的 Web service 客户机更新其接口。这个新的消息流允许较旧的客户机不更新他们自己的接口就可以使用新接口访问服务器。

在 Compute1 中,编写 ESQL 以将客户机请求映射到服务器请求;在 Compute2 中,编写 ESQL 以将服务器响应映射到客户机应答。您可以在 MRM 域中定义这些请求、应答和响应消息,以便简化从一种格式到另一种格式的转换。
您可以将 HTTPRequest 节点配置为根据 HTTPInput 节点接收的头生成 HTTP 头,这样便可以传递 cookies 和特定于其他应用程序的头。HTTPReply 节点可以提供等价的任务从来自 Web service 的响应中抽取头,以返回到发起客户机。如果您要执行该操作,请在 HTTPRequest 和 HTTPReply 节点上选择相应的生成缺省 HTTP 头的位置...复选框。
在大多数方案中,发起请求是没有值的,您只需要来自服务的响应能够生成客户机应答消息。如果是这样,请在 HTTPRequestIf 节点上选择属性将输入消息替换为 Web service 响应。如果确实想要保留输入请求中的所有数据,可以将它们存储在 Compute1 的 LocalEnvironment 中,并在 Compute2 中检索它们,以便将它们包含在应答中。