明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

使用SQLXML 3.0把存儲(chǔ)過程暴露為Web服務(wù)

[摘要]最新的技術(shù)是Web服務(wù),F(xiàn)在出現(xiàn)在所有市場(chǎng)中的類似簡(jiǎn)單對(duì)象訪問協(xié)議(SOAP)、Web服務(wù)描述語言(WSDL)、通用描述、發(fā)現(xiàn)和集成(UDDI)等術(shù)語的基本元素都是XML和Internet。 Web...
最新的技術(shù)是Web服務(wù),F(xiàn)在出現(xiàn)在所有市場(chǎng)中的類似簡(jiǎn)單對(duì)象訪問協(xié)議(SOAP)、Web服務(wù)描述語言(WSDL)、通用描述、發(fā)現(xiàn)和集成(UDDI)等術(shù)語的基本元素都是XML和Internet。

Web服務(wù)用于建立松散連接的應(yīng)用程序并實(shí)現(xiàn)互操作性。松散連接的應(yīng)用程序使你能重新配置、重新部署或重新定位它的實(shí)現(xiàn)而不影響相關(guān)的應(yīng)用程序;ゲ僮餍陨婕暗浇⒛軌蛟谠试SWeb服務(wù)的任何平臺(tái)上使用的應(yīng)用程序。通過Web服務(wù)暴露SQL Server給予應(yīng)用程序一個(gè)松散的連接接口,使你能夠修改數(shù)據(jù)庫(kù)的結(jié)構(gòu)和位置而不影響應(yīng)用程序。另外,Web服務(wù)使SQL Server能與更多的編程環(huán)境和平臺(tái)交互操作。

為了達(dá)到互操作性,開發(fā)者需要在一套開放的工業(yè)標(biāo)準(zhǔn)和協(xié)議上建立Web服務(wù)。XML是這些標(biāo)準(zhǔn)中多數(shù)的基礎(chǔ),提供了不依賴平臺(tái)的描述和數(shù)據(jù)表現(xiàn)。建立在XML上的SOAP提供了基于標(biāo)準(zhǔn)的向應(yīng)用程序發(fā)送數(shù)據(jù)和從應(yīng)用程序接收數(shù)據(jù)的途徑,代表性的是使用HTTP。WSDL描述了位置、方法、參數(shù)和Web服務(wù)使用的數(shù)據(jù)類型。UDDI為注冊(cè)Web服務(wù)或查找需要的其它Web服務(wù)的目錄提供了一個(gè)接口。通過把這些標(biāo)準(zhǔn)技術(shù)和T-SQL編程組合在一起,你能把SQL Server存儲(chǔ)過程實(shí)現(xiàn)為Web服務(wù)。

SQL Server 2000 Web Release 3(SQLXML 3.0)的焦點(diǎn)是Web服務(wù)(你能夠通過鏈接http://microsoft.com/sql/default.asp下載SQLXML 3.0)。SQLXML 3.0使你能夠從數(shù)據(jù)庫(kù)中選擇存儲(chǔ)過程并從虛擬目錄中選擇XML模版,把它們暴露為Web服務(wù)的方法。因?yàn)槟隳軌蛲ㄟ^Web服務(wù)和傳統(tǒng)方法(例如T-SQL EXEC語句、OLE DB、ADO和ODBC)調(diào)用存儲(chǔ)過程,你可以最大化地重復(fù)使用這些組件。簡(jiǎn)單地說,SQLXML 3.0使你能把數(shù)據(jù)庫(kù)編程中的專門技術(shù)擴(kuò)展到Web服務(wù)中而不需要學(xué)習(xí)新的語言或工具。下面讓我們看看怎樣把存儲(chǔ)過程轉(zhuǎn)變?yōu)閃eb服務(wù)。

配置虛擬目錄。把存儲(chǔ)過程暴露為Web服務(wù)的第一步是從安裝SQLXML 3.0產(chǎn)生的Configure IIS Support(配置IIS支持)菜單項(xiàng)中選擇Microsoft IIS Virtual Directory Manager(微軟IIS虛擬目錄管理器)。要建立虛擬目錄,從左邊的樹視圖中選擇Web服務(wù)器,接著展開該視圖并點(diǎn)擊默認(rèn)的Web站點(diǎn)。右擊右邊面板中的任意區(qū)域,選擇Context-》New-》Virtual Directory來顯示一個(gè)New Virtual Directory Properties(新虛擬目錄屬性)對(duì)話框。在“安全和數(shù)據(jù)源”頁(yè)面上,輸入能夠訪問Northwind示例數(shù)據(jù)庫(kù)的SQL Server登陸許可。注意你在“通用”頁(yè)面上選擇的目錄的許可必須給你在“安全和數(shù)據(jù)源” 頁(yè)面上為IIS配置的默認(rèn)用戶授權(quán)(請(qǐng)查看IIS文檔尋找配置的詳細(xì)信息)。為了避免許可的問題,為你的虛擬目錄選擇Inetpub\wwwroot的一個(gè)子目錄,IIS默認(rèn)用戶自動(dòng)擁有訪問Inetpub\wwwroot下面數(shù)據(jù)的權(quán)限。下一步,在“設(shè)置”頁(yè)面上,選擇Allow POST選項(xiàng),這樣虛擬目錄能夠接受HTTP POST請(qǐng)求。點(diǎn)擊“應(yīng)用”。

配置虛擬名稱。在配置虛擬目錄后,點(diǎn)擊New Virtual Directory Properties(新虛擬目錄屬性)對(duì)話框上的“虛擬名稱”頁(yè)面。從虛擬名稱列表中選擇新虛擬名稱,為該虛擬名稱選擇一個(gè)名字,接著把它的類型設(shè)置為soap。列表1顯示了把soap字符串作為虛擬名稱的VBScript代碼。給虛擬名稱輸入一個(gè)路徑。該路徑包含了當(dāng)你把修改保存到根目錄時(shí)從IIS虛擬目錄管理器中輸出的WSDL文件。我通常選擇('.'),它選擇相同的目錄作為虛擬目錄。你可以接收對(duì)話框中剩余字段的默認(rèn)值。點(diǎn)擊“保存”。當(dāng)你保存虛擬名稱時(shí),SQLXML 3.0給你指定的虛擬名稱目錄寫入兩個(gè)文件,擴(kuò)展名為.wsdl。其它的文件擴(kuò)展名為.ssc,包含IIS虛擬目錄管理器使用的存儲(chǔ)過程的XML描述,F(xiàn)在你選擇希望暴露作為Web服務(wù)方法的存儲(chǔ)過程。在本文的例子中,我使用列表2中所示的OrdersForCustomer存儲(chǔ)過程。這個(gè)存儲(chǔ)過程返回指定客戶ID(作為參數(shù)傳遞進(jìn)的)的訂單集合。進(jìn)行下一步之前,你必須使用查詢分析器(Query Analyzer)把這個(gè)存儲(chǔ)過程安裝在Northwind示例數(shù)據(jù)庫(kù)中。

列表1:調(diào)用一個(gè)存儲(chǔ)過程的VBScript代碼
Sub Main()
Dim xmlhttp
set xmlhttp = CreateObject("Msxml2.XMLHTTP.4.0")
Dim request
request = "<?xml version='1.0' encoding='UTF-8'
  standalone='no'?>" & _
"<SOAP-ENV:Envelope xmlns:
  SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>" & _
" <SOAP-ENV:Body>" & _
" <OrdersForCustomer xmlns=
    'http://localhost/June2002/soap'>" & _
" <CID>BOTTM</CID>" & _
" </OrdersForCustomer>" & _
" </SOAP-ENV:Body>" & _
"</SOAP-ENV:Envelope>"
xmlhttp.open "POST", "http://localhost/June2002/soap", False
xmlhttp.send (request)
MsgBox (xmlhttp.responseXML.xml)
End Sub



列表2:建立OrdersForCustomer存儲(chǔ)過程的代碼
CREATE PROCEDURE OrdersForCustomer @CID nvarchar(50)
AS
SELECT * FROM Customers, Orders
WHERE Customers.CustomerID = @CID
AND Customers.CustomerID = Orders.CustomerID
GO



建立Web服務(wù)。在“新虛擬目錄屬性”對(duì)話框的“虛擬名稱”頁(yè)面上選擇剛剛建立的虛擬名稱,接著點(diǎn)擊“配置”(Configure)。這樣就顯示了Soap虛擬名稱配置對(duì)話框。在這個(gè)對(duì)話框中,選擇你希望暴露作為Web服務(wù)方法的存儲(chǔ)過程。為了選擇一個(gè)存儲(chǔ)過程,點(diǎn)擊("..."),它建立你配置虛擬目錄訪問的一個(gè)數(shù)據(jù)庫(kù)中可用的存儲(chǔ)過程列表。不要選擇包含F(xiàn)OR XML子句查詢的存儲(chǔ)過程。作為代替,你必須選擇返回標(biāo)準(zhǔn)結(jié)果集合的存儲(chǔ)過程。SQLXML 3.0期望存儲(chǔ)過程返回輸出參數(shù)或標(biāo)準(zhǔn)結(jié)果的結(jié)果集。接著該結(jié)果在中間層中被建立為XML。選擇返回標(biāo)準(zhǔn)結(jié)果集的存儲(chǔ)過程使所有可以用于Web服務(wù)或傳統(tǒng)編程方法(例如T-SQL)的存儲(chǔ)過程的靈活性最大化了。當(dāng)你在中間層中建立XML查詢結(jié)果,要小心避免SQLXML 3.0的限制(你可以查看SQLXML 3.0在線文檔查看這些限制的詳細(xì)信息)。你選擇OrdersForCustomer存儲(chǔ)過程后,點(diǎn)擊“確定”(OK),接著點(diǎn)擊Soap虛擬名稱配置對(duì)話框的“保存”(Save)按鈕。這樣你就已經(jīng)建立了第一個(gè)Web服務(wù)了。你可以使用任何文本編輯器檢查為虛擬名稱選擇的目錄中的WSDL。該WSDL文件包含余你選擇的Web服務(wù)相對(duì)應(yīng)的方法定義。

為了測(cè)試新建立的Web服務(wù),使用列表1中顯示的VBScript代碼。該代碼建立一個(gè)調(diào)用該Web服務(wù)的SOAP消息,接著使用XMLHTTP對(duì)象把該SOAP請(qǐng)求發(fā)送給Web服務(wù)。SOAP結(jié)果顯示在一個(gè)消息框中。這個(gè)客戶端簡(jiǎn)單演示了SOAP小心在VBScript和SQLXML 3.0之間的交換。但是,它也顯示了現(xiàn)在存儲(chǔ)過程調(diào)用可以通過在HTTP上使用SOAP跨平臺(tái)交互操作,它們通過WSDL和SCC文件中的描述提供了到存儲(chǔ)過程的松散連接。