第四十三章 使用 WS-ReliableMessaging - 对 WS-ReliableMessaging 标头进行签名
对 WS-ReliableMessaging
标头进行签名
可以通过以下任一方式签署 WS-ReliableMessaging
标头。
使用 SecurityContextToken
对标头进行签名
如果还使用 WS-SecureConversation
,则 Web
客户端的 SecurityContextToken
属性包含一个对称密钥,可以使用该密钥对 WS-ReliableMessaging
标头元素进行签名。为此,请在调用 %SOAP.RM.CreateSequence
实例的 AddSTR()
方法,并将 SecurityContextToken
属性作为参数传递:
do createsequence.AddSTR(client.SecurityContextToken)
在调用 %StartRMSession()
之前执行此操作。
签署消息时签署标头
还可以使用与签署消息其余部分相同的方式签署 WS-ReliableMessaging
标头。为此,在调用 %XML.Signature
的 Create()
或 CreateX509()
方法时,将值 $$$SOAPWSIncludeRMHeaders
添加到 signatureOptions
参数。$$$SOAPWSIncludeRMHeaders
宏包含在 %soap.inc
文件中。
修改 Web
服务以支持 WS-ReliableMessaging
要修改 IRIS Web
服务以支持 WS-ReliableMessaging
,请修改 Web
方法以便它们执行以下操作:
- 验证入站请求消息是否包含 WS-ReliableMessaging
标头。
- 验证 WS-ReliableMessaging
标头是否已签名。
请注意 IRIS
会自动检查任何签名是否有效。请参阅验证和解密入站消息。
- 可选择指定
Web
服务类的参数来微调Web
服务的行为,如下一节所述。
控制 Web
服务如何处理可靠消息
可以指定 Web
服务类的以下参数来微调 Web
服务的行为:
RMINORDER
对应于 WS-ReliableMessaging
的 InOrder
策略断言。将其指定为 0
(false)
或 1 (true)
。有关详细信息,请参阅 Web Services Reliable Messaging Policy 1.1
规范。
默认情况下,当未指定此参数时, IRIS Web
服务不会发出有关消息顺序的 SOAP
错误。
RMDELIVERYASSURANCE
对应于 WS-ReliableMessaging
的 DeliveryAssurance
策略断言。将其指定为“ExactlyOnce”、“AtLeastOnce”或“AtMostOnce”
。有关详细信息,请参阅 Web Services Reliable Messaging Policy 1.1
规范。
默认情况下,当未指定此参数时,IRIS Web
服务不会发出有关根据此策略断言进行传送的任何失败的 SOAP
故障。
RMINACTIVITYTIMEOUT
指定 Web
服务接收的序列的不活动超时时间(以秒为单位)。默认值为 10
分钟。
此外,还可以实现 Web
服务的 %OnCreateRMSession()
回调方法。此方法在 WS-ReliableMessaging
会话开始时调用,然后返回 %SOAP.RM.CreateSequenceResponse
。此时,响应参数已完全创建,但尚未返回。此回调使有机会将任何所需的 Security
标头元素添加到 Web
服务的 SecurityOut
属性。如果使用 WS-Policy
,则 WS-Policy
支持会自动执行此操作。有关方法签名,请参阅 %SOAP.WebService
的类参考。