第四十章 SOAP 会话管理
SOAP Web 服务本质上是无状态的,因此不维护会话。但是,在 Web 客户端和它使用的 Web 服务之间维护会话通常很有用。 数据平台 SOAP 支持为提供了这样做的方法。
SOAP 会话概述
可以在 Web 客户端和 Web 服务之间维护会话。此支持包括以下工具:
Web会话管理SOAP会话标头,它是一个简单的专有标头。
总体流程如下:
Web客户端向Web服务发送初始消息。此消息不包含SOAP会话标头。Web服务接收消息并启动新的Web会话。- 当
Web服务发送其答复时,它会将SOAP会话标头添加到消息中。 - 当
Web客户端收到回复时,它必须检测SOAP会话标头并提取会话cookie。然后,当Web客户端发送另一条消息时,它必须使用该cookie在该消息中创建SOAP会话标头。
注意:
- 如果客户端是
Web客户端,则会话cookie会自动保存在Web客户端的SessionCookie属性中。此外,客户端实例还会自动创建SOAP会话标头并将其包含在其发送的所有消息中。 - 如果会话中的所有
SOAP消息都使用同一个客户端实例,则此步骤也会自动发生在.NET Web客户端上。可能需要针对其他客户端平台编写更多代码。
Web服务收到下一个回复,继续Web会话,并在响应时再次包含SOAP会话标头。
无需包含注销方法。Web 会话会在短暂的间隔后超时(Web 应用程序的超时期限)。
启用会话
为了使用 对 SOAP 会话的支持,必须使用 Web 服务。
- 如果 Web 客户端基于
IRIS,则只需一步即可启用SOAP会话支持。在Web服务类中,将SOAPSESSION参数设置为1。 - 如果使用第三方工具创建
Web客户端,则有责任检测初始响应中的SOAP会话标头元素,并确保Web客户端在会话生命周期内的所有请求中都包含此标头元素。此标头元素的格式如下:
<csp:CSPCHD xmlns:csp="https://www.intersystems.com/SOAPheaders"><id>value of CSPCHD token</id></csp:CSPCHD>
使用会话信息
启用会话后,Web 服务可以使用变量 %session,它是 %CSP.Session的一个实例。此对象的属性包含系统信息以及选择添加的任何信息。一些常用的属性如下:
SessionID— 此会话的唯一标识符。EndSession— 通常等于0。将此属性设置为1以结束会话。Data— 多维数组,用于保存任何自定义数据。NewSession— 如果这是新会话,则等于1。AppTimeout— 指定会话的超时值(以秒为单位)。
%session 对象提供了许多其他属性,以及一些与会话相关的任务方法。有关更多详细信息,请参阅 %CSP.Session的类文档。