文章發表

發表於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 版權所有,歡迎轉載,但請註明出處及連結!

創作者介紹

Mr. Zabo - 網路、趨勢、技術、新概念

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


留言列表 (1)

發表留言
  • elin
  • 您好 .... 參考您這系列文章 受益良多 .. 另外是否能指導 .. 關於出現下列錯誤訊息是為什麼呢 ? WSDLReader:Loading of the WSDL file failed HRESULT=0x80070057 - WSDLReader:XML Parser failed at linenumber 0, lineposition 0, reason is: 系統錯誤: -2146697208。 HRESULT=0x1
找更多相關文章與討論