首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 原生 XML Web Services 架構與實作指南

     編輯:關於SqlServer

前言:SOAP/HTTP 存取的革命性意義

SQL Server 2005 提供標準機制,透過 SOAP over HTTP 存取資料庫引擎。相較於舊有的專有二進位協定 TDS,SOAP/HTTP 為開放、有文檔的協定,支援更多用戶端類型(含「零安裝」用戶端),無需安裝 MDAC,促進跨平台互通(.NET、SOAP 工具包、Perl 等),並利於行動裝置或間歇性連線應用開發。

系統需求

需 Windows Server 2003 作業系統,因依賴核心模式 HTTP 驅動程式 http.sys。無需安裝 IIS 即可對外發布 Web Services,簡化管理;但若應用程式需顯式中介層,IIS 仍有其價值。

HTTP 端點:核心架構

建立 HTTP 端點並定義公開方法,即可讓 SQL Server 原生偵聽 SOAP 請求。每個端點擁有唯一 URL(如 https://servername/sql),http.sys 接收請求後路由至對應 SQL Server 執行個體的 SOAP 處理層。

  • 單一執行個體可建立多個端點。
  • 每個端點可公開任意數量的預存程序(T-SQL 或 CLR 實作)為 WebMethod,支援 SOAP RPC 呼叫。
  • WebMethod 名稱可與實際預存程序不同,會在 WSDL 中作為作業名稱顯示。
  • 透過 DDL 選用子句啟用 BATCHES,隱式公開 sqlbatch WebMethod,允許執行 Ad-hoc T-SQL 陳述式。

建立 HTTP 端點:Hello World 範例

-- 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 動態生成

WSDL 以 XML 描述 Web Service 位置與操作。工具(Visual Studio .NET、JBuilder)利用 WSDL 產生 Proxy 代碼。端點啟用 WSDL 時,經驗證的 HTTP GET 請求會觸發動態生成。支援簡單 WSDL(基本 XSD 型別)與複雜 WSDL(複雜型別,預設)。

SOAP RPC 與批次處理範例

方法呼叫

<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>

Ad-hoc 查詢 (sqlbatch)

<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 精確控制存取權限。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved