SQL Server 2005 內建原生 XML Web Services(SOAP/HTTP 端點),無需 IIS 即可直接將預存程序或使用者定義函數發布為 Web 服務,支援 WS-Security、WSDL 1.1、SOAP 1.2,適合異構環境、行動裝置、非同步服務整合。
USE AdventureWorks;
GO
CREATE FUNCTION dbo.EmployeeOrderCount(@EmpID INT)
RETURNS INT
AS
BEGIN
RETURN (
SELECT COUNT(*)
FROM Purchasing.PurchaseOrderHeader
WHERE EmployeeID = @EmpID
GROUP BY EmployeeID
);
END;
GO
CREATE ENDPOINT AdvEnd
STATE = STARTED
AS HTTP (
SITE = 'localhost',
PATH = '/AdvEnd',
AUTHENTICATION = (INTEGRATED),
PORTS = (CLEAR)
)
FOR SOAP (
WEBMETHOD 'GetEmployeeOrderCount' (
NAME = 'AdventureWorks.dbo.EmployeeOrderCount',
SCHEMA = STANDARD
),
WSDL = DEFAULT,
BATCHES = DISABLED,
DATABASE = 'AdventureWorks'
);
瀏覽器開啟 https://localhost/AdvEnd?wsdl 即可取得服務描述。
using System;
using advEndWS = ConsoleApp.advEnd; // Web 參考命名空間
class Program {
static void Main() {
advEndWS.AdvEnd ws = new advEndWS.AdvEnd();
ws.Credentials = new System.Net.NetworkCredential("Administrator", "password");
Console.Write("請輸入員工 ID (0 結束): ");
while (int.TryParse(Console.ReadLine(), out int id) && id != 0) {
try {
int cnt = ws.GetEmployeeOrderCount(id);
Console.WriteLine($"訂單數: {cnt}");
} catch (Exception ex) {
Console.WriteLine("錯誤: " + ex.Message);
}
Console.Write("請輸入員工 ID (0 結束): ");
}
}
}
?wsdl、?wsdlsimple 及自訂 WSDL。makecert -r -pe -n "CN=MySQLServer" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky Exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
httpcfg set ssl /i 10.10.10.1:443 /h /g
SQL Server 2005 原生 Web Services 為資料庫直接對外提供標準化服務能力,雖然後續版本逐漸由 WCF/ASP.NET Core 取代,但在舊系統維護與特定輕量整合場景仍具參考價值。