SQL Server 2005 提供標準機制,透過 SOAP over HTTP 存取資料庫引擎。相較於舊有的專有二進位協定 TDS,SOAP/HTTP 為開放、有文檔的協定,支援更多用戶端類型(含「零安裝」用戶端),無需安裝 MDAC,促進跨平台互通(.NET、SOAP 工具包、Perl 等),並利於行動裝置或間歇性連線應用開發。
需 Windows Server 2003 作業系統,因依賴核心模式 HTTP 驅動程式 http.sys。無需安裝 IIS 即可對外發布 Web Services,簡化管理;但若應用程式需顯式中介層,IIS 仍有其價值。
建立 HTTP 端點並定義公開方法,即可讓 SQL Server 原生偵聽 SOAP 請求。每個端點擁有唯一 URL(如 https://servername/sql),http.sys 接收請求後路由至對應 SQL Server 執行個體的 SOAP 處理層。
WebMethod,支援 SOAP RPC 呼叫。WebMethod 名稱可與實際預存程序不同,會在 WSDL 中作為作業名稱顯示。BATCHES,隱式公開 sqlbatch WebMethod,允許執行 Ad-hoc T-SQL 陳述式。-- 1. 建立預存程序
CREATE PROCEDURE hello_world (@msg NVARCHAR(256))
AS BEGIN SELECT @msg AS 'message' END;
-- 2. 建立端點
CREATE ENDPOINT hello_world_endpoint
STATE = STARTED
AS HTTP (
AUTHENTICATION = (INTEGRATED),
PATH = '/sql/demo',
PORTS = (CLEAR)
)
FOR SOAP (
WEBMETHOD 'https://tempuri.org/'.'hello_world' (NAME = 'master.dbo.hello_world'),
BATCHES = ENABLED,
WSDL = DEFAULT
);
端點儲存於 master.sys.http_endpoints。WSDL = DEFAULT 使用預設格式回應 WSDL 請求;設為 NONE 可停用。
支援基本、摘要、整合 (NTLM/Kerberos) 及 SQL 驗證。HTTP 傳輸層先驗證,成功後以使用者 SID 進行 SQL 驗證。SQL 驗證需指定 LOGIN_TYPE = MIXED,憑證透過 WS-Security UsernameToken 標頭傳遞。管理員可設定 IP 限制,僅允許特定 IP 存取。端點預設關閉,需顯式建立;物件層級安全檢查要求使用者同時擁有端點 CONNECT 權限與預存程序 EXECUTE 權限;不支援匿名連線(含 WSDL 請求)。
GRANT CONNECT ON HTTP ENDPOINT::hello_world_endpoint TO [DOMAIN\USER];
非 Microsoft 平台用戶端可用基本或 SQL 驗證,但必須在 SSL 連接埠上連線以確保通道安全。
WSDL 以 XML 描述 Web Service 位置與操作。工具(Visual Studio .NET、JBuilder)利用 WSDL 產生 Proxy 代碼。端點啟用 WSDL 時,經驗證的 HTTP GET 請求會觸發動態生成。支援簡單 WSDL(基本 XSD 型別)與複雜 WSDL(複雜型別,預設)。
<SOAP-ENV:Envelope ...>
<hello_world xmlns="https://tempuri.org/">
<msg>Hello World!</msg>
</hello_world>
</SOAP-ENV:Envelope>
回應:
<SqlRowSet1 xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"> <row><message>Hello World!</message></row> </SqlRowSet1>
<sqlbatch xmlns="https://schemas.microsoft.com/SQLServer/2001/12/SOAP">
<BatchCommands>
SELECT EmployeeID, LoginID, Gender FROM Employee WHERE EmployeeID=@x FOR XML AUTO;
</BatchCommands>
<Parameters>
<SqlParameter name="x" sqlDbType="Int" maxLength="20" ...>
<Value xsi:type="xsd:string">1</Value>
</SqlParameter>
</Parameters>
</sqlbatch>
僅需管理 SQL Server 元件,無需管理 IIS。端點抽象提供 IP 篩選彈性,可重用 HTTP/HTTPS 連接埠,透過 GRANT CONNECT 精確控制存取權限。