監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關閉

Microsoft .NET XML Web服務

申請免費試用、咨詢電話:400-8352-114

AMTeam.org

Microsoft .NET XML Web服務


Robert Hess

Microsoft Corporation

2001 年 8 月 20 日

好了,近來每個人都在談論 XML Web 服務:一般形式的,或是通過 .NET 提供的;談論它們使用 Microsoft Visual Studio? 更容易開發(fā),以及它們將成為 HailStorm(仍然是一個代號)的基礎。如果您讀過任何有關的文檔、白皮書或是新聞資料,您一定會淹沒在各種結構圖、業(yè)務模型試驗、服務基礎構造討論和其他類似的內容中,怕是要消化不良了吧。我在過去幾個月中一直在努力幫您消化這些東西。但是這到底是什么東西,怎樣才能真正利用它呢?

在本文中,我會提供一些非常簡單的代碼,演示 XML Web 服務是如何直接了當,以及您如何才能立即開始使用它們。

任何一個有長期計算機工作背景的人都會記得,早年市場上有各種各樣相互競爭的計算機系統(tǒng)。我指的不是大學和專業(yè)數據處理機構使用的大型機,而是家用計算機。Apple、IBM、Texas Instruments、KayPro、Commodore、Timex、Radio Shack 甚至 Mattel 都在生產各種規(guī)格和型號的個人計算機。那時關于為什么某種計算機優(yōu)于其他計算機的爭論層出不窮,但是我記得我自己那時的感受。

在了解和嘗試各種計算機之后,我看中的是那些對程序員而言能夠立即發(fā)揮作用的產品。我指的是那些能夠完成更多任務,而不是只能運行預裝的程序(通常是游戲軟件)的計算機。我最喜歡的是那些能讓我坐下來寫一些自己的代碼、而不用購買任何額外軟硬件的計算機。我能夠編寫的程序不是被人為限定的,而是能夠訪問計算機系統(tǒng)的各個層面。這才是“發(fā)揮作用”的計算機。

我的第一臺計算機是 TI 99/4A。在當時的計算機中,它非常棒:內置 BASIC、彩色顯示器和可編程的屏幕字體。但是,內置 BASIC 是一個限制。要編寫匯編程序,不僅需要購買額外的開發(fā)軟件,還需要擴展內存模塊 (EMM),而且要運行程序的人也需要有 EMM。經過短暫的輝煌,TI 最終從市場上淡出了。我接下來用的是一臺 Apple //c。這是一臺功能完備的計算機,可以用來編寫 BASIC 或匯編程序,其豐富的功能也使您能夠訪問內置在固件中的底層功能。它開箱就能使用,不需要購買任何額外的設備。

所有這些都強調了我認為對于技術成功很重要的一點:應用廣泛,使用簡便,無需專用軟硬件。使一種技術變得對普通用戶來說易于訪問并且有用,那么它將更容易脫穎而出。這些和 XML Web 服務有什么關系呢?

這些說明了我為什么要激動地宣傳 XML Web 服務的優(yōu)秀之處。不過,如果不自己安裝全套軟件來實際看看這些好處,那么它們就都是虛的。所以,接下來我就要告訴您,如何在只運行 Microsoft Windows? XP 的情況下編程訪問 XML Web 服務。當然,我們得承認安裝操作系統(tǒng)也構成了一個障礙,但是這有可能很快就成為一種標準,如同我們看到的所有 Windows 系統(tǒng)一樣。

在 Windows XP 中包括了兩個重要的組件,它們使您可以自己接觸 XML Web 服務。第一個是 Windows 腳本宿主,該組件包括在 Windows 的所有版本之中,并且基本已成定局。另外一個是 Microsoft SOAP 類型庫。它提供了必需的編程界面,以便訪問 .NET XML Web 服務以及與其交互。言歸正傳,讓我們正式開始吧。

如果您使用的是 Windows XP,請執(zhí)行以下操作:

創(chuàng)建一個名為 Mystic.vbs 的新文本文件。

在其中輸入以下 VBScript 代碼:

SET scEightBall = CreateObject("MSSOAP.SOAPClient")

scEightBall.mssoapinit _

   "
http://www.gotdotnet.com/playground/services/eightball/EightBallWS.asmx?WSDL"

WScript.Echo scEightBall.Ask("我這周五有約會嗎?")

現在執(zhí)行這個腳本文件??梢酝ㄟ^雙擊其圖標或在命令行中輸入以下命令來執(zhí)行:

C:> cscript mystic.vbs

無論以何種方式執(zhí)行,您都會看到針對您的問題的答案?,F在您已經編寫了第一個使用 XML Web 服務的應用程序。讓我們看看我們做了些什么,以及它是如何完成任務的。

首先,必須找到一個能完成此目的的 .NET 服務。這也許是整個過程中最難的一步。UDDI 是一個服務目錄,它是專門為定位基于 Internet 的服務設計的。缺點是它不僅僅能夠列出以上述代碼演示的方式使用的服務,所以我們需要謹慎地作出選擇。特別要注意的是,我們要使用以 .asmx?WSDL 結束的 URI。ASP .NET 被要求在此處為所提供的 XML Web 服務提供 WSDL(Web 服務說明語言)。通過 WSDL,Microsoft Soap 類型庫才能判斷 XML Web 服務提供的接口是什么,以及如何與之交互。

我恰好知道 www.GotDotNet.com(英文)中有一些 XML Web 服務的示例,這些對我使用此示例提供了幫助。以下是我怎樣知道上面三行代碼該怎么寫的:

首先我訪問了 http://uddi.microsoft.com(英文),這是一個有關他們提供的各種業(yè)務和服務的內容廣泛的目錄。

在“Search by business name”字段中,我輸入了 GotDotNet。我還有其他搜索方法,但是我覺得這種情況下這么搜索最快。

搜索結果返回一個列表/鏈接:

GotDotNet(英文)

.NET 框架社團網站

這就是我所尋找的內容,所以我單擊了這個鏈接。

于是出現了一串已經針對 GotDotNet 注冊的服務,包括:

名稱 說明 .NET Resources(英文) GotDotNet 資源中心是訪問各種 .NET 框架鏈接目錄的門戶。在這里,您將找到通往許多 .NET 框架網站的鏈接。 Thumbnail Generator(英文) 縮略圖生成器 Web 服務創(chuàng)建指定 URL 的 .gif 圖像。該服務將圖像在服務器上保存預先定義的一段時間,并返回 URL 以供訪問。 Quote of the Day(英文) 這個示例每天返回一句有趣的言論。 Eightball(英文) 八球 Web 服務模擬了我們熟悉并喜愛的八球玩具。該服務通過從一個 XML 文件中的一組標準答案中隨機選擇一項來完成。 test 這個 Web 服務僅用作測試。這不是很有趣,但是在您需要的時候會很方便。


在這個列表中有兩項看起來很有趣,即Quote of the Day(英文)和Eightball(英文)。來自八球的響應每天更改不止一次,看起來似乎更有活力,所以我覺得這個選項不錯,就單擊了該選項。

下一個頁面仍然在 UDDI 網站上,包含了更多關于八球 Web 服務的詳細信息。它包含一個指向
http://www.gotdotnet.com/playground/services/eightball/EightBallWS.asmx(英文)的鏈接。該頁面是 XML Web 服務的基本 URL,也是您無畏的鼠標要單擊的下一個目標。

顯示的頁面是單擊 ASMX 文件的結果。重要的是,您要看到的不是 ASMX 文件的內容,而是由 ASP .NET 為您創(chuàng)建的內容。ASP .NET 查看 ASMX 文件的內容,然后創(chuàng)建相應的 HTML,記錄 XML Web 服務及其可用的操作。在這個特殊的示例中,我們所看到的是這個服務的名稱 (EightBallWS),并且它還提供了一個簡單操作 (Ask)。

如果您單擊了 Ask,它不僅顯示有關此接口的 SOAP 說明。由此,我看出這個函數使用字符串作為輸入,而提供字符串作為結果。此頁面還向您提供了一個簡單窗體,用于測試此服務。在輸入框中輸入一個問題,然后單擊“Invoke”按鈕,將返回一個帶有實際響應 XML 的網頁。
現在我知道了編寫代碼實現這個功能的關鍵。具體而言:

該服務的 URL 是 http://www.gotdotnet.com/playground/services/eightball/EightBallWS.asmx(英文)。

服務的名稱是 EightBallWS。

我要調用的函數是 Ask,它使用字符串作為輸入參數,然后返回字符串作為結果。

讓我們再看一下我的代碼,一步步分析:

SET scEightBall = CreateObject("MSSOAP.SOAPClient")

這行代碼創(chuàng)建了我要使用的 SOAP 客戶端對象。

scEightBall.mssoapinit _

   "
http://www.gotdotnet.com/playground/services/eightball/EightBallWS.asmx?WSDL"

這行代碼初始化我的 SOAP 對象,并在我要使用的 XML Web 服務中指出。我也可以列出 mssoapinit 的第二個(可選)參數:應該是 EightBallWS,我要選用的服務的名稱。我們得到:

WScript.Echo scEightBall.Ask("我這周五有約會嗎?")

這一部分代碼僅僅調用我從此服務中訪問的一個方法,并將結果顯示到屏幕上。

所有這些都說明,編寫使用 .NET XML Web 服務的簡單應用程序是多么直接了當。隨著 Windows 腳本提供了一種流暢的方式促進用戶和 XML Web 服務之間的編程交互,編程達到了一個真實的層面,我們都能夠獲得親身體驗。

出于完整性考慮,我繼續(xù)完成了這個簡單應用程序的編寫,并且創(chuàng)建了一個更穩(wěn)定的版本,使您可以動態(tài)輸入要知道答案的問題。同時我完成了代碼,這樣它可以從命令行中執(zhí)行或者在雙擊圖標時直接執(zhí)行。

SET scEightBall = CreateObject("MSSOAP.SOAPClient")

scEightBall.mssoapinit _

"
http://www.gotdotnet.com/playground/services/eightball/EightBallWS.asmx?WSDL"

Set objArgs = WScript.Arguments

DIM a

FOR i = 0 to objArgs.Count - 1

   a = a & objArgs(i) & " "

NEXT

a = Trim(a)

DO WHILE len(a) <= 0

   a = Trim(Prompt("您的問題是什么?"))

LOOP

answer = scEightBall.Ask(a)

WScript.Echo vbCRLF & "答案是:" & answer

FUNCTION Prompt (question)
  
IF len(question) <= 0 THEN question = "Input"
  
ON ERROR RESUME NEXT
  
WScript.StdOut.Write question & ":"
  
IF (Err.Number = 0) THEN
     
Prompt = WScript.StdIn.ReadLine
  
ELSE
     
Prompt = InputBox (question)
  
END IF

END FUNCTION

值得注意的是,此服務接受一個簡單的參數,并返回一個簡單的值作為結果。.NET XML Web 服務可以來回傳遞復雜的結構和數據集,并且這些數據可以來自一個能處理復雜結構的編程語言,其操作跟我在此對 String 參數執(zhí)行的操作一樣簡單。但是,這種復雜性超越了 Windows 腳本的一般范圍,所以對于象上面這樣的程序,最好堅持使用傳遞簡單參數的 XML Web 服務。我們可以使用非常復雜的參數,但是這超出了本文所講述的范圍。

下面是一些附加的鏈接,您可以從中獲得有關 .NET XML Web 服務以及如何進行相關編程的詳細信息:

Windows XP 中的 SOAP 客戶端概述(英文)

SOAP Toolkit 2.0 文檔(英文)

WSDL 簡介(英文)

Web 服務要素(英文)

GotDotNet(英文)

發(fā)布:2007-03-24 18:00    編輯:泛普軟件 · xiaona    [打印此頁]    [關閉]
相關文章:
上海OA系統(tǒng)
聯系方式

成都公司:成都市成華區(qū)建設南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢