第三十四章 添加和使用自定义标题元素 - 支持的标头元素
支持的标头元素
IRIS
网络服务和客户端自动支持 WS-Addressing
和 WS-Security
标头,但不自动支持其他标头。
要在 Web
服务或客户端中指定支持的标头元素,请向类添加 XData
块并指定类参数 USECLASSNAMESPACES
。XData
块列出了支持的元素。类参数使 WSDL
包含适用的类型。请参阅指定支持的标头元素。
标头元素和 WSDL
Web
服务的 WSDL
公布了该 Web
服务所支持的标头元素以及与该 Web
服务通信的 Web
客户端所允许的标头元素。
对于 IRIS Web
服务,生成的 WSDL
可能不包含有关 SOAP
标头元素的信息:
- 如果通过设置
HeadersOut
属性手动添加SOAP
标头,请确保按照指定支持的标头元素中所述在XData
块中声明它们。同时在Web
服务类中将类参数USECLASSNAMESPACES
指定为1
。
如果遵循这些步骤,WSDL
将包含所有适用信息。否则,WSDL
将不包含所有适用信息,必须将 WSDL
保存到文件中,并根据需要手动编辑它。
- 如果通过设置
SecurityOut
属性来添加WS-Security
标头(如“保护 Web 服务”中所述),WSDL
将不包含所有需要的信息。(这是因为WSDL
是在编译时生成的,而标头是在运行时添加的。)在这种情况下,请将WSDL
保存到文件中,并根据需要手动编辑它。
出于多种原因,使用 WS-Policy
添加 WS-Security
元素更简单、更容易。使用 WS-Policy
,生成的 WSDL
包含所有需要的信息。
- 在其他情况下,生成的
WSDL
包含所有需要的信息。
请注意,W3C
规范并不要求 Web
服务提供生成的 WSDL
。
必需的标题元素
如果给定的报头元素指定 mustUnderstand=1
,则该元素被视为强制元素,接收者必须支持它。除非接收者识别所有强制报头元素,否则接收者无法处理该消息。
按照 SOAP
标准, 会拒绝包含必需但不受支持的标头元素的 SOAP
消息。具体来说,如果 Web
服务或客户端收到包含 mustUnderstand=1
的标头元素的消息,并且该服务或客户端不支持该标头元素,则该服务或客户端会发出 SOAP
错误,然后忽略该消息。
定义自定义标题元素
如果使用 SOAP
向导根据给定的 WSDL
创建 Web
服务或 Web
客户端,系统将生成类来根据需要表示任何标题元素。
如果手动创建 Web
服务或客户端,则必须手动定义类来表示任何自定义标头元素。具体操作如下:
- 对于每个自定义标题元素,创建
%SOAP.Header
的子类。 - 指定
NAMESPACE
参数来指示标头元素的命名空间。 - 指定
XMLNAME
参数来指示标题元素的名称。 - 在子类中,定义属性以包含您需要的标头信息。默认情况下,属性将投影到
<Header>
元素内的元素。 - 可选地指定
XMLFORMAT
参数,该参数控制此标头元素的格式。默认情况下,标头元素始终采用文字格式(而不是SOAP
编码)。
Class Scenario1.MyHeaderElement Extends %SOAP.Header
{
Parameter NAMESPACE = "https://www.myheaders.org";
Parameter XMLNAME = "MyHeader";
Property Subelement1 As %String;
Property Subelement2 As %String;
}
此标头元素在 SOAP
消息中显示如下:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope [parts omitted]>
<SOAP-ENV:Header>
<MyHeader xmlns="https://www.myheaders.org"
xmlns:hdr="https://www.myheaders.org">
<Subelement1>abc</Subelement1>
<Subelement2>def</Subelement2>
</MyHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
[omitted]
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
网友评论