处理 HTTP 流

本主题提供使用 HTTP 消息流与 Web service 交互时可能有用的信息。您可能会发现将它与后续的 Web service 方案部分结合在一起阅读很有用。

HTTPS
有关使用 HTTPS 的帮助,请参阅实现 SSL 认证
设置应答的 HTTP 状态码
缺省的 HTTP 状态码为 200,表示成功。如果要返回不同的状态码,请进行以下任何一种操作:
  • 在 LocalEnvironment(相关名为 OutputLocalEnvironment)的 Destination.HTTP.ReplyStatusCode 字段中设置状态码。如下所述,这将覆盖 HTTPResponseHeader 中设置的任何状态码。
  • 如果在您的流中,HTTPRequest 节点在 HTTPReply 节点前面,则将在逻辑树中创建 HTTPResponseHeader,表示来自其他 Web service 的响应中的 HTTP 头。为了方便起见,如果选中从应答或响应生成缺省 HTTP 头属性,则使用来自此头的值作为缺省值创建应答消息,使您能够在 HTTPResponseHeader 的 X-Original-HTTP-Status-Code 字段中设置状态码。您还可以在 HTTPReplyHeader 中设置此字段,但如上所述,建议您改为使用 LocalEnvironment。
使用 LocalEnvironment.Destination.HTTP.RequestIdentifier
当 HTTPInput 节点接收输入请求消息时,它将 LocalEnvironment 字段 Destination.HTTP.RequestIdentifier 设置为唯一的值,标识发送请求的 Web service 客户机。您可以引用此值并将它保存到其他位置(如果适用)。

例如,如果您设计一对消息流,与现有的 WebSphere MQ 应用程序交互(如代理调用现有的 Web service 中所述),则可以将此值保存在在请求流中,并在应答流中复原它来确保正确的客户机接收应答。如果这样做,则不得更改数据,且必须将数据作为 BLOB 保留。

HTTPReply 节点从 LocalEnvironment 抽取此值并设置应答,以便可以将它发送到特定的客户机。

如果您设计同时包含 HTTPInput 和 HTTPReply 节点的消息流,则该值将被 HTTPInput 节点设置到 LocalEnvironment 中,但 HTTPReply 节点不使用它。因此,如果您的消息流同时包含这两个节点并且在同一个流中包含 Compute 节点,则当您指定 Compute 节点将消息树的哪些组件从输入消息复制到输出消息(计算方式属性)时,无需包含 LocalEnvironment 树。

动态设置 HTTPRequest 节点 URL
您可以在 HTTPRequest 节点上设置属性缺省 Web service URL 来确定 Web service 请求的目标 URL。您可以在消息流内的 HTTPRequest 节点之前配置一个 Compute 节点,来覆盖属性中设置的值。编写 ESQL 代码,在 LocalEnvironment.Destination.HTTP.RequestURL 中存储 URL 字符串;此字符串由 HTTPRequest 节点进行检索并代替节点属性值使用。

尽管您还可以在 Compute 节点中请求消息 HTTPRequestHeader 部分中的特殊头 X-Original-HTTP-URL 里设置请求 URL(将覆盖所有其他设置),但针对此用途,还是建议您使用 LocalEnvironment 内容。

为 HTTPReply 节点设置从应答或响应生成缺省 HTTP 头
如果在 HTTPReply 节点属性对话框中选中从应答或响应生成缺省 HTTP 头复选框,则该节点将在发送到 Web Service 客户机的响应中包含一组最少的头。
如果要明确设置任何头,请在 HTTPReplyHeader 中创建它们。例如,Compute 节点要在 XMLNS 域中传播消息并想修改 Content-Type,可进行如下操作:
CALL CopyMessageHeaders();
SET OutputRoot.HTTPReplyHeader."Content-Type" = 'text/xml';
SET OutputRoot.XMLNS = InputRoot.XMLNS;

在 Content-Type 的特定情况中,除非您正在 MIME 域中工作,否则不要使用 ContentType 属性设置该头。ContentType 属性专用于设置 MIME 中使用的 Content-Type 的值。

请求中使用的整个 HTTP 头集是通过选择使用以下算法的头构建的:
  1. 在 HTTPReplyHeader 中选择任何一些头。
  2. 如果到目前为止尚未定义 Content-Type 头,则使用 ContentType 属性中的任何非空值创建一个 Content-Type。
  3. 在 HTTPResponseHeader 中选择任何一些头(HTTPResponsHeader 在从 HTTPRequest 节点返回时传播)。
  4. 如果到目前为止尚未定义 Content-Type 头,则创建一个缺省值为 text/xml; charset=utf-8 的 Content-Type 头。
  5. 创建或覆盖 Content-Length 头。
注意: HTTPReply 节点始终重写 Content-Length 头,即使您已经清除了从应答或响应生成缺省 HTTP 头复选框。这将确保内容正确。

如果在 HTTPReply 节点收到的消息中存在 HTTPReplyHeader 部分,并且连接了 HTTPReply 节点的 Output 终端,则将以任何更改或添加的值更新 HTTPReplyHeader 部分。

为 HTTPRequest 节点设置从输入生成缺省 HTTP 头
如果在 HTTPRequest 节点属性对话框中选中从输入生成缺省 HTTP 头复选框,则该节点将在发送到服务器的请求中包含一组最少的头。
如果要明确设置任何头,请在 HTTPRequestHeader 中创建它们。例如,Compute 节点要在 XMLNS 域中传播消息并想修改 Content-Type,可进行如下操作:
CALL CopyMessageHeaders();
SET OutputRoot.HTTPRequestHeader."Content-Type" = 'text/xml';
SET OutputRoot.XMLNS = InputRoot.XMLNS;
在 Content-Type 的特定情况中,除非您正在 MIME 域中工作,否则不要使用 ContentType 属性设置该头。ContentType 属性专用于设置 MIME 中使用的 Content-Type 的值。
请求中使用的整个 HTTP 头集是通过选择使用以下算法的头构建的:
  1. 根据消息的请求 URL 或入局 HTTPRequestHeader 部分设置主机头。
  2. 在 HTTPRequestHeader 中选择任何一些头。
  3. 如果到目前为止尚未定义 Content-Type 头,则使用 ContentType 属性中的任何非空值创建一个 Content-Type。
  4. 在 HTTPInputHeader 中选择任何一些头(HTTPInputHeader 由 HTTPInput 节点自动创建)。
  5. 如果到目前为止尚未定义 Content-Type 头,则创建一个缺省值为 text/xml; charset=utf-8 的 Content-Type 头。
  6. 如果到目前为止尚未定义 SOAPAction 头,则使用缺省值 '' 创建一个 SOAPAction 头
  7. 创建或覆盖 Content-Length 头。
注意: HTTPRequest 节点始终重写 Content-Length 头,即使您已经清除了从输入或请求生成缺省 HTTP 头复选框。这将确保内容正确。

如果在收到的消息中存在 HTTPRequestHeader,则将以任何更改或添加的值更新 HTTPRequestHeader。

更新开始如果有 HTTP 问题,请收集 HTTPListener 跟踪更新结束
更新开始如果有 HTTP 问题,您可以跟踪 HTTPListener:
  1. 使用 mqsichangetrace 命令启动跟踪。
  2. 使用 mqsireadlog 命令和 -b 参数的 HTTPListener 限定符,查看 HTTPListener 跟踪日志。
更新结束
相关概念
WebSphere MQ Web Services 传输方式
生成 WSDL
相关任务
创建消息流
部署
检查部署结果
相关参考
HTTPInput 节点
HTTPReply 节点
HTTPRequest 节点
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac20450_