保留 HTTP 命名空间

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

保留 HTTP 命名空间,是为了与 SQL Server 实例一起使用。保留 HTTP 命名空间可以使用隐式保留(例如,使用 CREATE ENDPOINT),也可以使用 sp_reserve_http_namespace 存储过程来显式保留。

保留 URL 命名空间的原因有:

  • 如果某应用程序以非管理员帐户运行,则在管理员没有保留命名空间的情况下,该应用程序在运行时无法绑定到命名空间。这是内核模式的 HTTP 驱动程序 (Http.sys) 的需要。

    不受这一规则约束的情形只有一种,即应用程序正在本地系统帐户下运行。在本地系统帐户下运行的应用程序可以绑定到任何空闲的命名空间。但是,即使是在本地系统帐户下运行,也建议您保留命名空间,原因如下。

  • 保留命名空间能保证其他应用程序无法绑定到该命名空间,因此该应用程序将独自拥有该命名空间的所有权。

    例如,如果某 SQL Server 实例在本地系统帐户下运行,不需要保留命名空间,但仍然建议您这样做,以避免应用程序发生关于 URL 的冲突。

保留命名空间是分层次的。例如,如果保留了命名空间 **http://adventure-works.com:80/**,则所有子命名空间(如 http://adventure-works.com:80/sqlapp1 和 **http://adventure-works.com:80/sqlapp2/dir1**)也将保留。

注意注意

若要使用内核模式的 HTTP 驱动程序 (Http.sys) 来保留 HTTP 命名空间,必须具有对安装了 SQL Server 实例的本地计算机的 Windows 管理权限。

创建显式保留

如果管理员希望用户在无需高级计算机权限的情况下,能够运行端点数据定义语言 (DDL) 语句,则可以创建显示保留,方法是使用 sp_reserve_http_namespace 存储过程来保留 URL 命名空间。

例如,可以通过使用 Windows 身份验证(具有管理员权限的登录名)连接到 SQL Server 实例并执行下列操作:

sp_reserve_http_namespace N'http://MyServer:80/sql'
GO

该存储过程显式地保留指定的命名空间,其中 MyServer 是服务器名称而 80 是端口号。此过程在保留指定的 URL 命名空间时采用了一种方式,可以使命名空间中随后的 DDL 操作不再需要计算机的管理员权限。没有计算机管理员权限的用户也可以执行端点 DDL 语句。

例如,用户可以执行以下 CREATE ENDPOINT 语句:

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

端点语句只是在 HTTP.SYS 中的保留命名空间里注册 /sql/AdvWorks。然后客户端应用程序便可以向端点发送 SOAP 请求(例如,请求服务器的 WSDL 响应):

http://MyServer/sql/AdvWorks?wsdl

sp_reserve_http_namespace 存储过程中指定的命名空间必须是以下形式:

<scheme>://<hostpart>[:<port>]/<RelativeURI>
  • scheme
    可以是 httphttps

  • hostpart
    可以是一个特定的主机名或以下通配符:加号 (+) 或星号 (*)。

    加号 (+) 表示对于指定的 <方案> 和 <端口>,保留操作适用于计算机所有可能的主机名。

    星号 (*) 表示保留操作应用于没有显式保留 <方案> 和 <端口> 的计算机的所有可能的主机名,比如通过运行其他 sp_reserve_http_namespace 操作、活动端点或其他应用程序。

标识端点的命名空间

您可以基于 CREATE ENDPOINT 语句中的参数标识某个端点的正确命名空间。

CREATE ENDPOINT 语句的 PORTS 参数的值决定命名空间的架构,如下表所示:

端点值

<scheme> 值

CLEAR

http

SSL

https

n

http

CLEAR_PORT 或 SSL_PORT 参数的值设置命名空间的 <端口> 值

PATH 参数的值设置命名空间的 <相对 URI>。

SITE 参数的值设置命名空间的 <主机部分>。

例如,下面的语句将创建命名空间为 http://testhost:80/sqlurl/myapp 的端点。

CREATE ENDPOINT ext_endpoint
    STATE = STARTED
AS HTTP (       
PATH = '/sqlurl/myapp'
, PORTS = CLEAR
, SITE = testhost
, CLEAR_PORT = 80 
)

下面的语句将创建命名空间为 https://*:443/sqlurl/myapp 的端点:

CREATE ENDPOINT ext_endpoint
    STATE = STARTED
AS HTTP (       
PATH = '/sqlurl/myapp'
, PORTS = SSL
, SITE = '*'
, SSL_PORT = 443 
)

示例

下面是另一个示例,其中管理员为 SSL 连接在 HTTP.SYS 中保留了一个命名空间。因此,用户可以在 PORT 设为 SSL 的地方创建端点。

sp_reserve_http_namespace N'https://MyServer:443/sql'