發表於Windows & .NET MAGAZINE 國際中文版雜誌 2005 年五月號  作者:葉建廷

引言:

XML 豐富的資料表達方式,儼然成為後 PC 時代最主要的溝通語言,各大 DBMS廠商設計新一代資料庫系統時,無不考慮將對XML 支援程度列為重大的課題。Web Services 則是以 SOAP 協定實現 XML 資訊交換的最佳方式,本文探討主題即是如何以 Web Services實作多層式架構存取 SQL Server的資料。 

觀察中大型企業對於Web應用程式設計上,有效率的資源應用及資訊的安全與否是企業非常重視的事情!一般不可能使用單純的 Client -Server架構,如圖 1,兩層式架構 (Two-Tier) 雖然能滿足客戶瀏覽的基本需求,但是卻會面對許多麻煩的問題:

  1. 執行效率容易遇到瓶頸:Web Server 除了網頁資訊的傳遞,還必須負擔所有的伺服端商業規則的執行,若伺服器的資源耗盡時,擴充性低。
  2. 程式重複使用性低:若多人一起開發Web應用程式,相同的邏輯的程式因為沒有元件化,無法達到重複使用的益處。
  3. 資料庫危險性升高: Web Server 直接與資料庫連線,若連線方式撰寫於網頁中,容易導致資料庫的帳號及密碼外洩。就算是使用 windows 帳號的認證的連線方式,風險仍高,因為萬一 Web Server 被入侵了,資料庫相對的也等於承認駭客的連線,也就完全沒有任何的防備了。 
  4. 兩層式架構 

1

至於多層式架構 (N-Tier),如圖 2,則能解決以上所面臨到的問題:

  1. 執行效率可提升:因為將商業邏輯移交由元件伺服器負責,可藉由硬體的擴充,達到效能的提升,甚至是負載平衡。
  2. 程式重複使用性高:相同的邏輯的程式都已元件化,程式可直接呼叫使用元件,減少程式開發的負擔。
  3. 資料庫危險性降低:不直接與資料庫相連接,存取資料庫一定要透過元件,以參數傳遞給負責的相關元件處理,而不能以SQL 語法直接要求資料庫動作,減低資料庫控管的風險。

多層式架構

2

多層式架構並不是新的課題,只是多年的工作經驗觀察,會認真思考以 Microsoft DNA 來規劃的人還是不多。可能因為習慣於方便的開發模式及開發時程的要求,導致企業包袱越來越重,變更架構日益困難。另一方面,開發人員會選擇的程式語言肯定是多樣化的,COM技術架構雖好但是在跨平台呼叫元件上卻困難重重。雖有遠端程序呼叫 ( RPC ) 可使用,不過學習門坎較高,加上各語言有不同的元件,彼此互通性低。

直到 Web Services 出現露出曯光,我們可以把 Web Services 想做是 Internet上的元件,符合 W3C 的規範有了統一的遊戲規則,而且各種語言陸續推出呼叫 Web Services API 供程式設計者使用,元件的跨平台互通更加容易了,如圖3

 Web Services架構

3

 

建置 SQL Server 2000 Web Services

要啟用 SQL Server 2000 XML 的支援,必須透過 SQLXML 來實現。因Web Services 是使用標準的 Web 通訊協定如 HTTPXMLUDDISOAP 以及 WSDL 來溝通,SQLXML架構圖如下:

SQL Server 2000的 Web Services架構  

4

 

SQLXML 設定IIS虛擬目錄管理後,會自動產生 WSDL描述所提供的服務,Client 端可以根據WSDL 透過 SOAP 協定和 SQLXML 溝通,資料操作的邏輯則可透過位於虛擬目錄中的 XML 範本 ( Template ) 或是 SQL Server 裡的 Store Procedure 存取資料庫。

先來實做上面的架構,利用 SQL Server 2000 中的 Northwind 範例資料庫,新增一個名為 GetCategories store procedure,供 Web 方法來對應,內容如下:

CREATE PROCEDURE GetCategories @CategoryID int AS

SELECT         CategoryID, CategoryName, Description

FROM             Categories

where CategoryID >= @CategoryID

GO

再來必須先下載 SQLXML,目前的版本是 SQLXML 3.0 Service Pack 3 (SP3),可以先到微軟的下載中心下載安裝程式,將剛才所下載的SQLXML 3.0 SP3 安裝起來,做一些設定的動作。

Step1. SQLXML 3.0 執行『設定IIS 支援』,透過『 IIS 虛擬目錄管理』,新增一個名為 Northwind 的虛擬目錄,並設定好自行定義的網站『本機路徑』,如圖 5

 IIS 虛擬目錄管理

5

Step2. 設定『安全性』:連線SQL Server 2000 時的認證方式,如圖 6 

 SQL Server 2000安全性認證

6 

Step3. 設定『資料來源』:設定要連接的SQL Server 及使用的資料庫,如圖 7

 SQL Server 2000 資料來源

7

Step4. 進入『設定』頁籤:由於是要是使用在 Web Services 上,為了安全起見,並不希望提供各種 XML 查詢方式,這裡我們只選擇『允許 template 查詢』及『允許 POST』,如圖 8

 SQLXML Web Services 設定

8

 

Step5. 設定『虛擬名稱』:新增一個虛擬名稱,『名稱』輸入 sqlxml,『型別』選擇 soap,『路徑』請自行決定要放置的路徑,例如筆者的路徑為 D:\wwwroot\Northwind。『Web 服務名稱』輸入 sqlAsXml,供程式呼叫之用,『網域名稱』若有請設定,若沒有,也可以根據 ip 來呼叫,將這些設定『儲存』起來,如圖 9

 sqlxml『型別』設定

9

Step6. 『儲存』完畢後,點選『設定』按鈕,就要開始設定 Web 方法,型別的對應方式有兩種,一種是對應到在資料庫中所撰寫的 store procedure,就是這個畫面中的『SP』,另一種是對應到在 Web Services Server 中的 XML Templates,就是所謂的『範本』。這裡選擇『SP』,因為是要對應剛才所寫的store procedure。在『方法名稱』中輸入 GetCategories,『SP/範本』選擇GetCategories,『輸出為』選擇 XML 物件,點選『儲存』,如圖 10

 SQL XML XML Templates 設定

10

SQLXML 設定完成後,可以先用瀏覽器看看是否已產生對應的 Web Services 服務描述語言(WSDL)http://localhost/NorthWind/sqlxml?wsdl,如果有(如圖11 ),表示 SQLXML 已經產生相對應的 Web Services 了。

 Web Services 服務描述語言(WSDL)

11

 

為了體會Web Services 在不同語言使用上的共通性及方便性,本文提供 ASP ASP.NET 兩種程式碼來學習。ASP 如果要支援 Web Services,必須先安裝 SOAP Toolkit,目前的版本是3.0,可以至微軟下載中心下載安裝。

 

Mr. Zabo 版權所有,歡迎轉載,但請註明出處及連結!

arrow
arrow
    全站熱搜

    Zabo 發表在 痞客邦 留言(1) 人氣()