使用 SOAP 会话

后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

为了在现有会话的上下文中执行 SOAP 请求,必须在向服务器提出的 SOAP 会话请求中指定以下内容:

  • 服务器以前提供给客户端的同一会话 ID。

  • 以前启动了 SOAP 会话的端点的相应 HTTP 端点 ID。

  • 相同的用户上下文。是 Windows 用户还是 SQL Server 用户取决于 SOAP 属性中针对端点支持的 LOGIN_TYPE。

如果指定的会话标识符不存在或者格式不正确,则返回 SOAP 错误消息,并且返回的 sqlSession 元素的标头中包含 terminate 属性。否则,服务器通过返回客户端在请求中发送的 sqlSession 标头来响应。

如果执行请求的上下文或端点不是启动会话时的安全上下文或端点,则返回 SOAP 错误。在响应中,将指定表示 SOAP 层终止的 SOAP 错误代码,而在 sqlSession 标头中,terminate 属性值为 true

此外,为防止恶意用户终止现有会话,人们会设置 terminate 属性,而且只要服务器发现请求中要登记的会话属于未知会话,它就会返回 SOAP 错误作为唯一的响应消息。

示例

下面是一个登记 SOAP 会话的示例。其中说明了客户端在请求登记到现有的 SOAP 会话时发送的 SOAP 消息的格式。请注意,实际的 sessionId 值将是一个会话特定的标识符。

<SOAP-ENV:Header
  xmlns:SOAP-ENV="https://schemas.xmlsoap.org/soap/envelope/"
  xmlns:sqloptions="https://schemas.microsoft.com/sqlserver/2004/SOAP/Options">
    <!-- enlist in an existing session --><sqloptions:sqlSession sessionId="AAAAADreaLE="/>
</SOAP-ENV:Header>

如果会话可以访问,则服务器将该消息原样返回给客户端;如果请求中标识的会话无法访问,则服务器向客户端返回 SOAP 错误。