保留 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
可以是 http 或 https。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'