下面是一个失败的方法调用的 soap 错误示例:
<?xml version="1.0"?>
<soap-env:envelope
xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"
soap-env:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap-env:fault>
<faultcode>xmlanalysiserror.0x80000005</faultcode>
<faultstring>xml for analysis 提供程序遇到错误</faultstring>
<faultactor>xml for analysis provider</faultactor>
<detail>
<faultstring>
<error
errorcode="2147483653"
description="出现意外的错误。"
source="xml for analysis provider"
helpfile=""
/>
</faultstring>
</detail>
</soap-env:fault>
</soap-env:envelope>
xml for analysis 中对有状态的支持
默认情况下,xml for analysis 是无状态的。(无状态是这样一种情况,即服务器在完成方法调用后不记住客户端的标识或上下文)。为了支持有状态(即服务器在两次方法调用之间保留客户端标识和上下文的情况),为提供程序提供了对会话的支持。对于一系列应一起执行的语句,会话非常有用。示例之一就是创建将在后继查询中使用的已计算成员。
提供程序对会话的支持是可选的。客户端可以通过用 discover 方法检查 xml for analysis 属性 statesupport 的值来测试支持。使状态发生的最小值为 sessions。有关 statesupport 属性的详细信息,请参见 xml for analysis 属性。
通常,会话遵从 ole db 规范所规定的行为,如下所示:
- 会话定义事务和命令上下文的范围。
- 多个命令可以在单个会话的上下文中执行。
- 对 xml for analysis 上下文中事务的支持是通过用 execute 方法发送的提供程序特定命令来处理的。
xml for analysis 定义了一种支持 web 环境中的状态(会话)的方法,其模式与分布式创作和版本控制 (distributed authoring and versioning, dav) 协议使用的方法类似,以实现在松散耦合环境中的锁定。在提供程序可以出于各种原因(如超时或连接错误)使会话过期这一方面,此规范与 dav 相似。这也意味着 web 服务必须识别并准备好处理已中断且必须重新开始的各组命令。
soap 规范建议使用 soap 标头在 soap 消息的顶部构建新协议。下表列出了 xml for analysis 为初始化、维护和关闭会话而定义的 soap 标头元素和特性。
| soap 标头 | 说明 |
| beginsession | 请求提供程序创建新会话。提供程序应通过构造新会话并返回该会话 id 作为 soap 响应中 session 标头的一部分来进行响应。 |
| sessionid | 值区域包含会话 id。在会话的其余部分中,每次方法调用都必须使用此 id。提供程序在 soap 响应中发送此标记,并且客户端也必须在每个 session 标头元素中发送此特性。 |
| session | 对于每个要在会话中发生的方法调用,必须使用此标头,并且必须在标头的值区域中包括会话 id。 |
| endsession | 要终止会话,请使用此标头。值区域中必须包括会话 id。 |