在 SQL Server 中,MS向數據庫引擎中添加了對本機 XML Web 服務的支持。現在我讓我們來看一下它的功能。本機 XML Web 服務提供了以下特性:
異類環境支持:本機 XML Web 服務是圍繞眾所周知的標准(如 SOAP 1.2、WSDL 1.1 ,WS-Security和 HTTP)設計的。將解決方案建立在這些標准之上,可以在大多數企業都擁有的異類環境中支持互操作性和服務擴張。這正是現在很多大企業所需要的。
安全性:對WS-Security的支持,可以提供高級的安全性。
更易於公開 Web 服務:添加到 SQL Server 中的新的基礎結構大大有利於直接向服務器外部公開 Web 服務,這是因為將本機 SOAP 堆棧內置到數據庫引擎中消除了使用中間層進程(如 IIS)達到這一目標的需要。
參與面向服務的體系結構:本機 XML Web 服務使 SQL Server 能夠作為組件參與面向服務的體系結構,因為服務在這些新的體系結構中提供了黏合劑。本機 XML Web 服務使您既可以將存儲過程作為 Web 服務公開,而且可以針對數據庫服務器執行特殊的 T-SQL 語句。本機 XML Web 服務通過使得將存儲過程公開為 Web 服務變得非常容易來利用這一投資。
提高性能:本機 Web 服務可以提高性能,因為數據訪問是在進程內發生的,而不是被發送到中間層進程。大多數數據庫應用程序都在存儲過程中內置了大量以數據為中心的邏輯,這種情況下使用內置的Web服務可以大大提高SQL Server 性能。
實際上,微軟已經基於 SOAP 創建了一種新的訪問 SQL Server 的機制;SOAP 提供了與當前的 Tabular Data Stream (TDS) 專用二進制協議幾乎相同的功能。它可以廣泛的應用於以下環境:
移動方案
現在,有了SQL Server 2005的本機 XML Web 服務,任何能夠分析 XML 和提交 HTTP 請求的設備都可以訪問 SQL Server。有了這一前提,非常適合於為移動設備和不定時連接的設備開發應用程序,而這又使得隨時、隨地訪問 SQL Server 成為可能。
異步服務
可以將本機 Web 服務與 SQL Service Broker(也通過 SQL Server 提供,這個我們以後會有講解)結合使用,以便構建提供異步服務的解決方案。因為現在很多程序都需要使用異步的解決方案。
請考慮一個訂單處理工作流。由於要進行庫存檢查,信用卡確認之類的過程,所以需要很長時間,但是我們不能讓用戶在我們把這些所有的工作都做完才能用戶反饋,此時我們就要考慮使用異步的解決方案。我們可以公開一個 SQL Server Web 服務,該服務接收訂單,並且通過立即確認它已經收到了該訂單進行響應。然後,可以將該訂單輸入到服務代理程序隊列中,以便進行處理。在履行該訂單時,我們可以使用客戶端已經預訂的任何通知機制來通知該客戶端。這樣用對戶就更容易接受。
下面是個例子,我們將把一個電子商務網站中的用戶已經訂購的次數發布為一個Web Services,並通過一個簡單的客戶端代碼來調用此Web Services:
--- 以下的用戶自定義函數可以返回一個客戶已經訂購的次數,另外在SQL Server2005中的用戶自定義函數已經可以直接返回BLOG數據類型。
USE AdventureWorks
GO
CREATE FUNCTION EmployeeOrderCount(@EmpID INT)
RETURNS INT
AS
BEGIN
RETURN
(
SELECT COUNT(*) AS 'Employee Order Count'
FROM Purchasing.PurchaSEOrderHeader
WHERE EmployeeID = @EmpID
GROUP BY EmployeeID
)
END
GO
--- 把上面的存儲過程發布為一個Webservices
CREATE ENDPOINT AdvEnd ---Endpoint名字
STATE = STARTED
AS HTTP
(
SITE = 'localhost', ---Server name
PATH = '/AdvEnd',
AUTHENTICATION = ( INTEGRATED ),
PORTS = ( CLEAR )
)
FOR SOAP
(
WEBMETHOD 'GetEmployeeOrderCount'
(
NAME = 'AdventureWorks.dbo.EmployeeOrderCount',
SCHEMA = STANDARD
),
WSDL = DEFAULT,
BATCHES = DISABLED,
DATABASE = 'AdventureWorks'
)
下面我們來看一下這個Web Service的WSDL定義,打開一IE,在地址欄中輸入http://localhost/advend?wsdl。
以後我們在開發中就可以直接使用增加一個Web引用來使用此Webservices.新建一個C#Console 項目,加入一個Web引用,命名為advend.加入如下代碼:
advend.AdvEnd ws = new advend.AdvEnd();
ws.Credentials =
new System.Net.NetworkCredential("Administrator", "XXXX");
int input = int.Parse(Console.ReadLine());
try
{
while (input != 0)
{
int result = (int)ws.GetEmployeeOrderCount(input);
Console.WriteLine(result);
input = int.Parse(Console.ReadLine());
}
}
catch (Exception e1)
{
Console.WriteLine(e1.Message.ToString());
Console.Read();
}
現在運行,我們就可以看到一個最簡單的SQL Server 2005 Web services 例子,aspxuexi.com,ASP學習網。
補充幾點:
SQL Server 2005支持的SOAP WebService not ASP.NET XML Web Service。這還是有一點不一樣的。我們通過在.Net Project中Add Web Reference可以直接使用,但是功能是有限的,有一些功能使用這個方法無法實現,例如Sessions\Transaction,需要自定義SOAP消息實現SessionID&TransactionID。
SQL Server 2005對於SOAP WebService的驗證可以支持2種模式,就像SQL Server一樣,Windows Or Mixed Type。但是用戶需要進行2次認證,first layer is http.sys, second layer is SQL Server,so user must have permission with connect to Windows server and then user sql authentication。也就是說用戶必須要先使用Credentials連接到Server,然後使用SQL Login。在Create endpoint 中指定http.sys的驗證,在for soap中指定WebService的驗證。另外在使用Mixed Type驗證時,必須通過https,也就是在create endpoint中指定ssl端口。如果機器上沒有安裝IIS或者沒有證書時,可以使用 makecert結合httpcfg來配置。
SQL Server 2005中提供了2種不同的WSDL,可以用過?WSDL和?WSDLSIMPLE來訪問,一般我們可以使用?WSDL訪問,WSDLSIMPLE是為了提供對於以前的SOAPTOOLKIT的應用程序支持。另外我們也可以指定自己的CustomerWSDL。
C:\>makecert -r -pe -n "CN=MySQLServer" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localm
achine -sky Exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
httpcfg set ssl /i 10.10.10.1:443 /h /g