设置服务器以侦听本机 XML Web 服务请求

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

将 SQL Server 实例设置为可以侦听本地 HTTP SOAP 请求的 Web 服务需要创建一个 HTTP 端点(URL 命名空间),以及定义该端点的属性和该端点的公开方法。

为用于 SQL Server 而创建的 HTTP 端点可以侦听和接收用于万维网服务的 Microsoft Internet Information Services (IIS) 使用的同一 TCP 端口(端口 80)上的请求。这是因为每个 URL(不论它用于 SQL Server 还是 IIS)都在 Windows Server 2003 操作系统中注册以用于系统 HTTP 侦听器进程 (Http.sys)。

例如,假设您创建了一个带 URL 的端点:http://MyServer/My endpoint。此端点随后在 Http.sys 中进行了注册。当向此端点发送 SOAP 请求时,该请求将首先转到 URL 中所标识的服务器 (MyServer)。收到请求后,服务器上的 Http.sys 层会将 URL 的其余内容与已注册端点进行对照,并跳过 IIS 而直接将请求转发给 SQL Server 实例。此外,通过使用 Internet 服务管理器 (Inetmgr.exe) 控制台,还可以创建一个虚拟目录,该目录等同于用于 IIS 的带有不同 URL 的 HTTP 端点,例如:http://MyServer/MyVDir。

创建和管理端点

若要创建和管理端点,请使用以下 Transact-SQL 语句:

  • CREATE ENDPOINT

    用于创建端点、定义客户端应用程序可以用来向端点发送 HTTP SOAP 请求的方法以及设置身份验证和指定端口。

  • ALTER ENDPOINT

    用于添加、删除或修改方法,或者更改端点选项。

  • DROP ENDPOINT

    用于删除不需要的或已过时的端点。

端点权限和身份验证

若要创建、修改或删除 HTTP 端点,您必须具有相应的权限。若要访问端点,需要进行身份验证。下列主题说明了这些要求:

Web 可编程性

若要公开存储过程或用户定义函数,请参阅以下主题:

默认执行环境

默认情况下,在 SQL Server 中,对本机 XML Web 服务的 HTTP SOAP 请求基于下表所列的设置来执行。

  • SET ANSI_NULL_DFLT_ON ON
    如果数据库的默认 ANSI NULL 选项为 FALSE,则将忽略新列的默认为 Null 性。有关详细信息,请参阅 SET ANSI_NULL_DFLT_ON (Transact-SQL)

  • SET QUOTED_IDENTIFIER ON
    可以用双引号分隔标识符,而文字必须用单引号来分隔。有关详细信息,请参阅 SET QUOTED_IDENTIFIER (Transact-SQL)

  • SET NUMERIC_ROUNDABORT OFF
    精度的降低不会生成错误消息,会根据存储结果的列或变量的精度,将结果舍入。有关详细信息,请参阅 SET NUMERIC_ROUNDABORT (Transact-SQL)

  • SET ARITHABORT ON
    如果在执行查询时出现溢出或被零除错误,将终止该查询或批处理。有关详细信息,请参阅 SET ARITHABORT (Transact-SQL)

  • SET ANSI_WARNINGS ON
    如果聚合函数(例如 SUM 或 AVG)中出现 Null 值,将生成一条警告消息。有关详细信息,请参阅 SET ANSI_WARNINGS (Transact-SQL)

  • SET ANSI_NULLS ON
    使用等于 (=) 或不等于 (<>) 运算符执行的与 Null 值的比较将返回 FALSE。有关详细信息,请参阅 SET ANSI_NULLS (Transact-SQL)

  • SET CONCAT_NULL_YIELDS_NULL ON
    将 Null 值与字符串连接会生成 NULL 结果。有关详细信息,请参阅 SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)

  • SET ANSI_PADDING ON
    对于存储的值短于定义的列大小的列,将填充这些值。对于在 char、varchar、binary 和 varbinary 数据中具有尾随空格的列,将不修整尾随空格或零。有关详细信息,请参阅 SET ANSI_PADDING (Transact-SQL)

  • SET CURSOR_CLOSE_ON_COMMIT ON
    当提交或回滚事务后,所有打开的游标都将被关闭。有关详细信息,请参阅 SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

  • SET IMPLICIT_TRANSACTIONS OFF
    默认情况下,HTTP SOAP 会话中的事务以自动提交模式运行,在这种模式下,各条语句都会在成功完成后提交。有关详细信息,请参阅 SET IMPLICIT_TRANSACTIONS (Transact-SQL)

HTTP SOAP 服务的群集故障转移注意事项

安装 SQL Server 时,最好将域帐户用作 SQL 服务帐户,并确保该帐户在本地计算机上不具有完全管理权限。如果在 Windows 群集中将 SQL 服务器设置为虚拟服务器,则有一些执行此操作的建议。配置 SQL HTTP-SOAP 本机服务时应注意一些事项。

SQL Server 利用了 Windows Server 2003 中的 HTTP 驱动程序。使用 HTTP 侦听器是为了将请求路由到在 Windows 平台(包括 SQL Server 和 IIS 服务)中订阅此请求的任何应用程序。若要订阅此服务,应用程序需要调用 HTTP API 以保留应用程序特定的根 URL(也称为命名空间)。该保留可告知 HTTP 驱动程序将所有后续请求从上述 URL 路由到订阅的应用程序。必须在具有本地 Windows 管理员权限的帐户的环境中执行对这些 HTTP API 的调用。从 SQL Server 2005 开始,上述调用通过使用名为 sp_reserve_http_namespaces 的特殊存储过程执行(有关详细信息,请参阅保留 HTTP 命名空间)。此存储过程在根 URL 和 SQL 服务帐户之间创建绑定,以便 Windows HTTP 驱动程序执行路由操作。如果 SQL 服务帐户在本地计算机上不具有管理员权限,则必须改用 Windows 本地管理员帐户调用此存储过程。注册此命名空间之后,便可针对要重定向的后续 HTTP 请求在该 URL 下创建 SQL SOAP 端点。在群集设置中,必须由本地 Windows 管理员在每一个节点上建立此 HTTP 命名空间保留。这可以确保在任何节点上出现故障转移的情况下,HTTP 服务仍可以将请求路由到 SQL 服务器。

对于 SQL Server 和 HTTP-SOAP,在群集故障转移中需要注意的另一个事项是何时将加密证书用于通过 SSL 通道的请求。有关详细信息,请参阅配置 SSL 使用的证书。在群集环境中,还需要在每一个节点上完成证书的配置。这些证书的主题必须设置为完全限定的虚拟服务器名称。若要确保已配置通过 HTTP 的 Kerberos 身份验证,请参阅使用 Http.sys 注册 Kerberos 服务主体名称,这也适用于群集。