Share via


保留 HTTP 命名空間

未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

您可以透過使用隱含保留 (例如,使用 CREATE ENDPOINT),或透過使用 sp_reserve_http_namespace 預存程序進行明確保留,保留 HTTP 命名空間供 SQL Server 執行個體使用。

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
    可為特定的主機名稱或下列萬用字元:加號 (+) 或星號 (*)。

    加號 (+) 表示保留作業適用於指定 <scheme> 和 <port> 之電腦所有可能的主機名稱。

    星號 (*) 意謂著保留作業會針對未明確保留的 <scheme> 與 <port> 套用至該電腦的所有可能主機,例如執行其他的 sp_reserve_http_namespace 作業、使用中端點或其他的應用程式。

識別端點的命名空間

您可以根據 CREATE ENDPOINT 陳述式中的參數,識別端點的正確命名空間。

CREATE ENDPOINT 陳述式中 PORTS 參數的值決定命名空間的配置,如下列表格所示:

端點值

<scheme> 值

CLEAR

http

SSL

https

n

http

CLEAR_PORT 或 SSL_PORT 參數的值會設定命名空間的 <port> 值。

PATH 參數的值會設定命名空間的 <RelativeURI>。

SITE 參數的值會設定命名空間的 <hostpart>。

例如,下列陳述式會建立命名空間為 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'