使用 Http.sys 预留 URL 命名空间

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

您可以在 HTTP.SYS 中显式预留 URL 命名空间,然后使用此命名空间创建 HTTP 端点。若要执行此操作,必须了解显式与隐式命名空间预留的概念以及 SQL Server 如何向 HTTP.SYS 注册 HTTP 端点。

显式命名空间预留与隐式命名空间预留

当用户执行下面的 CREATE ENDPOINT 语句时:

CREATE ENDPOINT sql_endpoint 
   STATE = STARTED
AS HTTP (
   PATH = '/sql/AdvWorks', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ), 
   SITE = 'MyServer'
)
FOR SOAP (
    ...
)
Go

HTTP.SYS 中将隐式预留命名空间 http://MyServer:80/sql/AdvWorks。这意味着当基于 SQL Server 的应用程序运行时,对此端点的任何 HTTP 请求都将被转发到 SQL Server 实例。但是,如果 SQL Server 实例未运行,则其他应用程序可以使用此命名空间。

显式预留命名空间时,将专门预留用于 SQL Server 的命名空间,对此端点的所有 HTTP 请求都将被转发到 SQL Server 实例。有关详细信息,请参阅保留 HTTP 命名空间

注意注意

Visual Studio 2005 和 Http.sys 遵循不同的 URL 规范化规则。例如,Http.sys 可以接受创建端点时指定为 PATH 设置的一部分的内含通配符,如“/SQL/Mypath/...”。而 Visual Studio 2005 具有更严格的规范化规则,并在传输 URL 之前调整“...”信息。

SQL Server 如何注册端点

若要管理 HTTP 端点,可以使用 CREATE ENDPOINTALTER ENDPOINTDROP ENDPOINT。必须具有创建、修改或删除端点所需的权限。主题GRANT 端点权限 (Transact-SQL) 对此进行了说明。

当您执行 CREATE ENDPOINT 来创建端点时,SQL Server 运行该语句并向 HTTP.SYS 注册端点。SQL Server 根据指定端点语句的上下文来模拟调用方,如下所示:

  • 如果在 Windows 帐户的上下文中执行语句,则 SQL Server 模拟调用方向 HTTP.SYS 注册端点。

  • 如果在 SQL Server 帐户(例如 sa 或某些其他 SQL Server 登录帐户)的上下文中执行语句,则 SQL Server 使用安装 SQL Server 时指定的 SQL Server 帐户模拟调用方向 HTTP.SYS 注册端点。

SQL Server 模拟的 Windows 帐户和 SQL Server 帐户都必须具有本地 Windows 管理员特权,才能成功注册 HTTP 端点。

验证 HTTP 命名空间预留

若要确定 HTTP.SYS 中预留了哪些命名空间,可以在命令提示符处运行 HTTP 配置实用工具 Httpcfg.exe。

注意注意

Httpcfg.exe 安装为 Windows Server 支持工具的一部分。有关详细信息,请参阅配置 HTTP 内核模式驱动程序 (Http.sys)

下面的示例使用 Httpcfg.exe 返回预留的 HTTP 命名空间的列表:

httpcfg query urlacl

此命令将显示所有现有命名空间预留的列表,并返回预留命名空间的 URL 和帐户。

下面是此命令的典型输出:

URL: http://adventure-works.com:80/sql/
ACL : D:(A;;GA;;;S-1-5-21-123456789-1234567890-1262470759-1010)
-----------------------------------------------------------------
URL : https://adventure-works.com:443/sql/
ACL : D:(A;;GA;;;NS)
-----------------------------------------------------------------
注意注意

只有 sysadmin 角色的成员才可以执行此过程,此过程要求模拟帐户对计算机具有管理员特权。