本机 XML Web 服务的指导原则和限制
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。
下列指导原则和限制适用于本机 XML Web 服务请求:
当 SOAP 未命名会话(SOAP 未命名会话只在一个请求期间内存在)请求事务通知,并且包括 BEGIN TRANSACTION 语句但不包括 COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 语句时,服务器回滚该事务,但是不将回滚事务通知节点包括在 SOAP 响应中。
只有那些运行于支持 HTTP API (Http.sys) 的 Windows 操作系统版本上的 SQL Server 实例才支持本机 XML Web 服务。如果试图在不满足此操作系统要求且不支持 Http.sys 的 SQL Server 实例上部署本机 XML Web 服务,数据定义语言操作将失败,并且不会发生本机侦听。
如果 SQL Server 实例是在 Windows XP Professional 上运行,则可能无法成功创建端点。例如,如果 Internet Information Services (IIS) 正在运行,则尝试运行 CREATE ENDPOINT 语句将失败,并返回以下错误:“试图注册端点 'endpointName' 时发生错误 ('0x80070020')。”
此错误指示由于 IIS 侦听 Windows XP 下的端口 80,SQL Server 实例和 IIS 之间发生了进程冲突。若要解决此问题,请执行以下操作:
停止万维网服务
通过使用除端口 80 以外的其他端口重新运行 CREATE ENDPOINT。
可以将端点配置为使用多个端口,但不能指定两个相同类型的端口。例如,可以指定一个清除端口和一个 SSL 端口,但不能指定两个清除端口或两个 SSL 端口。
不支持用户定义的表值函数。
SOAP 不支持将扩展存储过程公开为 Web 方法。
不能禁用非 HTTP 端点(只能将 HTTP 端点的状态设置为禁用)。
尽管 SOAP 规范明确禁止在 SOAP 请求和响应中使用 XML 处理指令,但 SQL Server 并没有强制此限制。如果在封装 SOAP 请求时存在处理指令 (PI),服务器将忽略这些指令。如果 PI 出现在 XML 参数的内容中,它们将始终是 XML 数据的一部分。SOAP 响应不应包含处理指令,除非这些处理指令是检索的 XML 参数的一部分。此行为的隐含意义是,SOAP 客户端应用程序可能不接受包含 PI 的 xml 数据类型行实例值,或者应用程序可能会将 SQL Server 返回的类型化 XML 中包含的 PI 条带化。如果这是一个重要的方案,您可以生成 Web 服务,在 Web 服务将任何 xml 数据类型发送回 SOAP 客户端之前将它们转换为 NVarChar 或 VarBinary。
为了在 Visual Studio 2005 中获得更好的互操作性,请确保端点 Web 方法中使用的任何命名空间都不同于端点上使用的 xml 数据类型架构所用的命名空间。
端点返回的 WSDL 结果可能包含无效的 XSD 架构,例如,在下列任一方案中,多次输出单个命名空间时可能会出现这种情况:
端点包含多个 XML 类型的参数,这些参数引用不同的架构集合,而每个集合定义相同的命名空间。
该端点包含的 XML 类型的参数引用了为在 SQL Server 中用于本机 XML Web 服务而预定义的命名空间 URI。此方案可能适用的预定义命名空间 URI 包含下表中列出的 URI。
Prefix
命名空间 URI
sql
https://schemas.microsoft.com/sqlserver/2004/SOAP
sqloptions
https://schemas.microsoft.com/sqlserver/2004/SOAP/Options
sqlsoaptypes
https://schemas.microsoft.com/sqlserver/2004/SOAP/types
sqlmessage
https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlMessage
sqlparameter
https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlParameter
sqlresultstream
https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlResultStream
sqlrowcount
https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlRowCount
sqltransaction
https://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlTransaction
sqltypes
https://schemas.microsoft.com/sqlserver/2004/sqltypes
xml
http://www.w3.org/XML/1998/namespace
xsd
http://www.w3.org/2001/XMLSchema
xsi
http://www.w3.org/2001/XMLSchema-instance