第三十三章 添加和使用自定义标题元素

70 阅读3分钟

第三十三章 添加和使用自定义标题元素

本主题介绍如何添加和使用自定义 SOAP 标头元素。

有关发生故障时添加标头元素的信息,请参阅 SOAP 故障处理。

WS-Addressing 标头元素在其他地方进行了描述。有关 WS-Security 标头元素的信息,请参阅“保护 Web 服务”。

SOAP 标头元素简介

SOAP 消息可以包含标头( <Header> 元素),其中包含一组标头元素。例如:

<SOAP-ENV:Envelope>
   <SOAP-ENV:Header>
      <MyHeaderElement>
         <Subelement1>abc</Subelement1>
         <Subelement2>def</Subelement2>
      </MyHeaderElement>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
...
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

非正式地,每个标头元素通常称为标头。这并不完全准确,因为消息本身最多可以包含一个标头,该标头始终为 <Header>,并带有适当的命名空间前缀。标头可以包含 WS-Security 标头元素、WS-Addressing 标头元素和您自己的自定义标头元素。

标头元素包含其他信息,供接收 SOAP 消息的 Web 服务或 Web 客户端使用。在此处显示的示例中,此信息包含在 XML 元素中。标头元素还可以包含 XML 属性,尽管上例中未显示任何属性。SOAP 标准指定了三个标准属性(mustUnderstandactorencodingStyle),以指示接收者应如何处理 SOAP 消息。

如何表示 SOAP 标头

IRIS 数据平台将每个标题元素表示为 %SOAP.Header或其子类之一的实例。%SOAP.Header 是一个支持 XML 的类,其属性对应于标准标题元素属性 (mustUnderstandactorencodingStyle)。

IRIS 提供 %SOAP.Header的专用子类,用于 WS-AddressingWS-Security。要表示自定义标头元素,您可以创建自己的 %SOAP.Header子类。

Web 服务或客户端收到 SOAP 消息时,它会导入并处理该消息。在此步骤中,如果消息包含带有自定义标头元素的标头,则 IRIS 会将标头元素与受支持的标头元素列表进行比较(下一小节将讨论)。

然后,服务或客户端创建每个适用的标头元素类的实例,将其插入到数组中,并将该数组放置在其自己的 HeadersIn 属性中:

image.png

要使用这些标头元素, Web 服务或客户端可以访问 HeadersIn 属性。如果 SOAP 消息不包含 <Header> 元素,则 HeadersIn 属性的 Count()0

类似地,在 Web 服务或客户端发送 SOAP 消息之前,它必须更新 HeadersOut 属性,以便它包含想要包含在出站消息中的任何自定义元素。如果 HeadersOut Count()0,则出站 SOAP 消息不包含 <Header> 元素。

image.png

对于自定义标题元素,始终使用 HeadersInHeadersOut 属性。

其他(非自定义)标题元素的细节有所不同:

  • 对于 WS-Addressing,请使用 AddressingInAddressingOut 属性,而不是 HeadersInHeadersOut 属性。请参阅添加和使用 WS-Addressing 标头元素。
  • 对于 WS-Security 标头元素,请使用“保护 We 服务”中描述的 WS-Policy 功能。

或者直接使用 SecurityInSecurityOut 属性,如“保护 Web 服务”中所述。这通常需要做更多工作。

(请注意,WS-Security 标头元素也包含在 HeadersInHeadersOut 属性中,但不建议通过这些属性访问或设置它们。)

  • IRIS SOAP 会话支持使用 HeadersInHeadersOut 属性。请参阅 SOAP 会话管理。