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 服务。
IRIS,则只需一步即可启用 SOAP 会话支持。在Web 服务类中,将 SOAPSESSION 参数设置为 1。Web 客户端,则有责任检测初始响应中的 SOAP 会话标头元素,并确保 Web 客户端在会话生命周期内的所有请求中都包含此标头元素。此标头元素的格式如下:<csp:CSPCHD xmlns:csp="https://www.intersystems.com/SOAPheaders"><id>value of CSPCHD tokenid>csp:CSPCHD>
启用会话后,Web 服务可以使用变量 %session,它是 %CSP.Session的一个实例。此对象的属性包含系统信息以及选择添加的任何信息。一些常用的属性如下:
SessionID — 此会话的唯一标识符。EndSession — 通常等于 0。将此属性设置为 1 以结束会话。Data — 多维数组,用于保存任何自定义数据。NewSession — 如果这是新会话,则等于 1。AppTimeout — 指定会话的超时值(以秒为单位)。%session 对象提供了许多其他属性,以及一些与会话相关的任务方法。有关更多详细信息,请参阅 %CSP.Session的类文档。