設定伺服器接聽原生 XML Web Service 的要求

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

將 SQL Server 的執行個體設定為可接聽原生 HTTP SOAP 要求的 Web 服務,需要建立 HTTP 端點 (URL 命名空間) 並且定義其屬性,以及端點所公開的方法。

針對搭配 SQL Server 使用所建立的 HTTP 端點可以接聽並接收 TCP 通訊埠 (通訊埠 80) 的要求,此通訊埠與 Microsoft Internet Information Services (IIS) 針對 World Wide Web 服務所使用的通訊埠相同。這可能是因為每一個 URL (無論是否搭配 SQL Server 或 IIS 使用) 都會註冊在 Windows Server 2003 作業系統中,以便透過系統 HTTP 接聽程式處理序 (Http.sys) 使用。

例如,假設您建立了一個端點,其 URL 是 http://MyServer/My endpoint。此端點就會註冊在 Http.sys 中。當 SOAP 要求傳送到此端點時,要求就會先到達 URL 中所識別的伺服器 (MyServer)。一旦接收要求,伺服器的 Http.sys 層會比較 URL 的其他部分和已註冊的端點,並且將要求直接轉送到 SQL Server 的執行個體,而不使用 IIS。此外,您可以使用網際網路服務管理員 (Inetmgr.exe) 主控台,以不同的 URL 建立一個相當於用在 IIS 之 HTTP 端點的虛擬目錄,例如 http://MyServer/MyVDir。

建立和管理端點

若要建立和管理端點,請使用下列 Transact-SQL 陳述式:

  • CREATE ENDPOINT

    用來建立端點、定義用戶端應用程式可將 HTTP SOAP 要求傳送到端點的方法,以及設定驗證並指定通訊埠。

  • ALTER ENDPOINT

    用來新增、卸除或修改方法或是變更端點選項。

  • DROP ENDPOINT

    用來刪除不想要或過時的端點。

端點的權限和驗證

若要建立、修改或卸除 HTTP 端點,您必須擁有權限。存取端點也需要驗證。下列主題將描述這些需求:

Web 的程式設計支援

若要公開預存程序或使用者定義函數,請參閱下列主題:

預設執行環境

根據預設,對 SQL Server 中原生 XML Web Service 的 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 Server 做為虛擬伺服器時,這麼做是有某些含意的。這些考量是關於設定 SQL HTTP-SOAP 原生服務。

SQL Server 會運用 Windows Server 2003 的 HTTP 驅動程式。此 HTTP 接聽程式是用以在 Windows 平台中將要求路由至任何訂閱服務的應用程式,包括 SQL Server 與 IIS 服務。為了訂閱此服務,應用程式需要呼叫 HTTP API 以保留應用程式的特定根目錄 URL,又稱為命名空間。此保留可讓 HTTP 驅動程式從該 URL 將所有後續的要求路由至訂閱的應用程式。對於這些 HTTP API 的呼叫必須在擁有本機 Windows 管理權限的帳戶下進行。從 SQL Server 2005 開始,這些呼叫是使用稱為 sp_reserve_http_namespaces 的特殊預存程序來執行 (請參閱<保留 HTTP 命名空間>以取得詳細資訊)。此程序會針對 Windows HTTP 驅動程式路由建立根目錄 URL 與 SQL 服務帳戶之間的繫結。如果 SQL 服務帳戶沒有本機的管理權限,預存程序必須改用 Windows 本機管理帳戶來呼叫預存程序。一旦註冊此命名空間,就可以在該 URL 下建立 SQL SOAP 端點,以利重新導向後續的 HTTP 要求。在叢集設定中,本機 Windows 管理員必須在每一個節點上建立 HTTP 命名空間保留。這將可確保若在任何節點上發生容錯移轉,HTTP 服務仍然可將要求路由至 SQL 伺服器。

另一個對 SQL Server 與 HTTP-SOAP 的叢集容錯移轉之考量,是針對透過 SSL 通道的要求使用加密憑證的情況。如需詳細資訊,請參閱<設定 SSL 使用的憑證>。在叢集環境中,需要對每一個節點設定憑證。這些憑證的主旨必須設定為虛擬伺服器名稱的完整名稱。若要確定已設定透過 HTTP 的 Kerberos 認證,請參閱<使用 Http.sys 註冊 Kerberos 服務主要名稱>,這也適用於叢集。