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

使用UDDI的Web服務描述和發(fā)現(xiàn)(第一部分)

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

AMTeam.org

使用UDDI的Web服務描述和發(fā)現(xiàn)(第一部分)


Karsten Januszewski

Microsoft Corporation

2001年10月3日

簡介

到目前為止,At Your Service 專欄已經(jīng)介紹了如何建立 Web 服務的實際案例:從最初的設計文檔到業(yè)務關(guān)聯(lián),直至最終的部署。下一步就是要考慮如何發(fā)布 Web 服務,以便感興趣的客戶能夠輕松地發(fā)現(xiàn)該服務并將其應用到自己的應用中?,F(xiàn)在已經(jīng)有了實現(xiàn)這種要求的發(fā)現(xiàn)機制:通用說明、發(fā)現(xiàn)和集成 (UDDI),這是業(yè)界支持跨技術(shù)、跨平臺的 Web 服務發(fā)現(xiàn)的第一步。

At Your Service 的作者誠懇地邀請我為專欄撰文,介紹 UDDI 及其注冊步驟,我非常樂于接受這項工作。首先我將從技術(shù)和業(yè)務兩方面來介紹 UDDI 的含義。隨后我將討論一下 UDDI 和 Web 服務說明語言 (WSDL) 之間的關(guān)系。最后,我將帶您體驗 UDDI 的注冊過程,并介紹一些充分發(fā)揮 UDDI 潛力所需考慮的問題。在下一期專欄,即本文的第二部分中,我將介紹 At Your Service 小組是如何充分利用 UDDI 的。

UDDI - Web 服務的全球注冊表

UDDI 是一個公共的注冊表,旨在以一種結(jié)構(gòu)化的方式來保存有關(guān)各公司及其服務的信息。通過 UDDI,人們可以發(fā)布和發(fā)現(xiàn)有關(guān)某個公司及其 Web 服務的信息。這些數(shù)據(jù)使用標準的分類法進行分類,因此可以按分類來查詢信息。最重要的是,UDDI 包含有關(guān)公司服務的技術(shù)接口的信息。通過一套基于 SOAP 的 XML API 調(diào)用,用戶可以在設計時和運行時與 UDDI 進行交互以發(fā)現(xiàn)技術(shù)數(shù)據(jù),從而調(diào)用和使用這些服務。通過這種方法,UDDI 可以用作基于 Web 服務的軟件系統(tǒng)的基礎結(jié)構(gòu)。

為何使用 UDDI?為何需要這種注冊表?當我們面對具有數(shù)千甚至數(shù)百萬個 Web 服務的軟件系統(tǒng)時,將面臨以下的嚴峻挑戰(zhàn):

如何發(fā)現(xiàn) Web 服務?

如何按照某種合理的方式分類信息?

對本地化有什么影響?

對專用技術(shù)有什么影響?如何保障發(fā)現(xiàn)機制的互操作性?

當應用依賴于某項 Web 服務時,如何在運行時與該發(fā)現(xiàn)機制進行交互?

UDDI 的出現(xiàn)正是為了應對這些挑戰(zhàn)。為了解決這些問題,許多公司,其中包括 Microsoft、IBM、Sun、Oracle、Compaq、HP、Intel、SAP 以及三百多家其他公司(請參閱 UDDI: Community(英文)以獲得這些公司的完整列表),共同制定了一種基于開放式標準和非專用技術(shù)的規(guī)范。該規(guī)范的 Beta 版于 2000 年 12 月發(fā)布,正式產(chǎn)品于 2001 年 5 月推出。它是一個全球業(yè)務注冊表,建立在多個運營商節(jié)點上,用戶可以通過這些節(jié)點免費搜索和發(fā)布信息。

通過 Web 服務的這種基礎結(jié)構(gòu),現(xiàn)在就能夠以一種通用的、與供應商完全無關(guān)的方式找到有關(guān) Web 服務的數(shù)據(jù),而且數(shù)據(jù)一致并且可靠。使用可擴展的分類系統(tǒng)和標識,用戶可以進行精確的分類查詢。運行時 UDDI 集成可以被合并到應用程序中去。因而大大繁榮了 Web 服務軟件環(huán)境。

工作原理

UDDI 數(shù)據(jù)存放在運營商(即承諾運營一個公共節(jié)點的公司)節(jié)點上。這種公共節(jié)點遵循 UDDI.org 組織管理的規(guī)范。目前已經(jīng)建立了兩個遵循 UDDI 規(guī)范版本 1 的公共節(jié)點:一個屬于 Microsoft;另一個屬于 IBM。HP 也承諾將建立一個遵循規(guī)范版本 2 的節(jié)點。數(shù)據(jù)寄存運營商之間必須能通過安全通道復制數(shù)據(jù),從而為整個 UDDI 云團提供數(shù)據(jù)冗余。將數(shù)據(jù)發(fā)布到一個節(jié)點上后,通過復制,就可以在另一個節(jié)點上發(fā)現(xiàn)這些數(shù)據(jù)。目前,每隔 24 小時就進行一次復制;在將來,由于有更多的應用程序要依賴 UDDI 數(shù)據(jù),復制的時間間隔還將縮短。

值得一提的是,對于數(shù)據(jù)寄存運營商實現(xiàn)其節(jié)點的方式,不存在一些專用的要求,只要節(jié)點遵循 UDDI 規(guī)范即可。例如,Microsoft 的節(jié)點 http://uddi.microsoft.com/default.aspx(英文)完全用 C# 寫成,并運行于 .NET Beta 2 公共語言運行時環(huán)境下。其代碼基礎充分利用了 .NET 系統(tǒng)類提供的本地 SOAP 支持和序列化。在后端,Microsoft 運營商節(jié)點使用 Microsoft? SQL Server 2000 作為其數(shù)據(jù)倉庫。而 IBM 使用其他技術(shù)來運行其節(jié)點!但是,這兩個節(jié)點的行為是相同的,因為它們都遵循相同的一套基于 SOAP 的 XML API 調(diào)用??蛻舳斯ぞ呖梢院瓦@些節(jié)點進行無縫的交互操作。因此,UDDI 公共云團是一個最佳方案,它展示了 XML Web 服務模型如何跨異類環(huán)境進行工作。

為了了解 UDDI,下一步我們來看看 UDDI 中存儲的數(shù)據(jù)及其存儲結(jié)構(gòu)。UDDI 相對來說是輕量的,它被設計為“注冊表”,而不是“儲備庫”。兩者之間的差別很微妙,但卻很重要。注冊表將用戶重定向至資源,而儲備庫則完全是一個信息庫。我們以 Microsoft? Windows? 注冊表為例:它包含基本設置和參數(shù),但最終把應用程序引導至資源或二進制代碼?;?Prog ID 搜索 COM 組件時,將引導至一個 Class ID,然后通過 Class ID 再引導至二進制代碼本身所在的位置。

UDDI 的行為與之類似:與 Windows 注冊表一樣,它依靠全局唯一標識符 (GUID) 來搜索并定位資源。UDDI 查詢最終指向一個接口(.WSDL、.XSD 和 .DTD 文件等等),或指向其他服務器上的實現(xiàn)(例如 .ASMX 或 .ASP 文件)。UDDI 因此可以回答以下問題:

“已經(jīng)發(fā)布了哪些基于 WSDL 并是為指定行業(yè)建立的 Web 服務接口?”

“哪些公司已經(jīng)為其中一個接口寫好了實現(xiàn)?”

“目前提供的 Web 服務(以某種方式分類)有哪些?”

“某個公司提供了哪些 Web 服務?”

“如果要使用某個公司的 Web 服務,需要與誰聯(lián)系?”

“某個 Web 服務的實現(xiàn)細節(jié)是什么?”

WSDL 和 UDDI

WSDL 已成為 Web 服務協(xié)議堆棧的重要組成部分。因此,有必要掌握 UDDI 和 WSDL 如何協(xié)同工作,以及每個協(xié)議如何解決接口和實現(xiàn)這兩個相對的概念。WSDL 和 UDDI 都是為清楚說明抽象的元數(shù)據(jù)和具體實現(xiàn)之間的關(guān)系而設計的,了解為什么要這么劃分是理解 WSDL 和 UDDI 的基礎。

例如,WSDL 明確區(qū)分消息和端口:消息(Web 服務所需的語法和語義)始終是抽象的,而端口(調(diào)用 Web 服務的網(wǎng)絡地址)始終是具體的。在 WSDL 文件中不需要提供端口信息。WSDL 可以只包含抽象的接口信息,而不提供任何具體的實現(xiàn)數(shù)據(jù)。這樣的 WSDL 文件被認為是有效的。這樣,WSDL 文件便從實現(xiàn)中分離出來。

其重要意義之一在于:一個 WSDL 接口可以有多個實現(xiàn)。這種設計允許不同的系統(tǒng)為同一接口編寫自己的實現(xiàn),從而保證系統(tǒng)之間能進行對話。如果三個不同的公司實現(xiàn)了相同的 WSDL 文件,一個客戶端軟件根據(jù)這個 WSDL 接口創(chuàng)建了代理/存根代碼,那么這個客戶端軟件就可以使用相同的代碼基礎與所有這三個實現(xiàn)進行通信,只要更改訪問點即可。

UDDI 通過 tModel 的概念描繪了抽象和實現(xiàn)之間的這種區(qū)別。tModel 結(jié)構(gòu)(“技術(shù)模型”的簡稱)代表了技術(shù)指紋、接口和元數(shù)據(jù)的抽象類型。使用 tModel 的必然結(jié)果是綁定模板,它是一個或多個 tModel 的具體實現(xiàn)。在綁定模板內(nèi),要為 tModel 的特定實現(xiàn)注冊訪問點。如同 WSDL 架構(gòu)允許分離接口和實現(xiàn)一樣,UDDI 也提供了相似的機制,因為 tModel 可以獨立于引用它的綁定模板而單獨發(fā)布。例如,某標準化組織或行業(yè)組織可能為特定行業(yè)發(fā)布規(guī)范接口,然后多個公司可以為該接口編寫實現(xiàn)。因此,各個公司的實現(xiàn)都需要引用同一個 tModel。WSDL 文件是 UDDI tModel 的完美示例。

用 UDDI 進行注冊

發(fā)布到 UDDI 是一個比較直接的過程。第一步是確定在 UDDI 上為公司及其服務建立模型所需的基本信息。之后便可以進行實際注冊。這可通過基于 Web 的用戶界面或編程兩種方法完成。最后測試您的注冊條目以確保注冊正確,并且在不同類型的搜索和工具中都能按要求顯示。

步驟 1:為 UDDI 條目建立模型

考慮上述數(shù)據(jù)模型,在建立 UDDI 條目之前應準備好幾個關(guān)鍵數(shù)據(jù)。

確定 Web 服務實現(xiàn)所需使用的 tModel(WSDL 文件)。

與開發(fā) COM 組件類似,開發(fā) Web 服務時可以使用現(xiàn)有的接口,也可以使用自己設計的接口。如果 Web 服務基于現(xiàn)有 WSDL,則需要確定該 WSDL 文件是否已經(jīng)在 UDDI 上注冊。如果是,就需要記錄其名稱和 tModelKey,這是注冊 WSDL 文件時 UDDI 所生成的 GUID。

另一方面,如果 Web 服務所基于的 WSDL 文件尚未在 UDDI 上注冊,就需要準備創(chuàng)建一個新的 tModel 來代表這個接口。此 tModel 應具有統(tǒng)一資源標識符 (URI) 格式 (MyCompany-com:SampleWebService-interface:v1) 的名稱,并指向 WSDL 文件所在的位置。

如果 Web 服務是 Microsoft? Visual Studio? .NET 服務,則可以使用 .ASMX 文件(也就是:<http://www.mycompany.com/SampleWebService.asmx?wsdl>)中的查詢字符串來生成 WSDL 說明。但是,Visual Studio .NET 生成的 WSDL 文件與調(diào)用 Web 服務的訪問點緊密耦合在一起,如果 Web 服務接口有多個實現(xiàn),訪問點可能就不適用了。如果不希望 WSDL 文件有多個實現(xiàn),這就不是問題。

如果需要,可以用多種語言確定公司的名稱和簡介,以及公司 Web 服務的主要聯(lián)系方法。

UDDI 支持 xml:lang 名稱空間,它允許公司用多種語言提供公司簡介。另外,UDDI 還允許列出聯(lián)系方式,包括電子郵件、電話和地址信息。聯(lián)系列表用于列出公司內(nèi)與 Web 服務相關(guān)的資源。例如,如果有人想要使用您的 Web 服務,并需要聯(lián)系相應的業(yè)務關(guān)系經(jīng)理,應該聯(lián)系誰?使用公司的 Web 服務時,有關(guān)技術(shù)問題和誰聯(lián)系?該聯(lián)系人也應該列出。

為公司確定適當?shù)姆诸惡蜆俗R。

通過 Microsoft UDDI 節(jié)點 http://uddi.microsoft.com/default.aspx(英文)瀏覽當前支持的 UDDI 分類法。當前支持的分類法有北美行業(yè)分類系統(tǒng) (NAICS)、通用標準產(chǎn)品和服務代碼 (UNSPSC)、ISO 3166、標準行業(yè)分類 (SIC) 和 GeoWeb 地理分類。請選擇一種最適于您的公司的分類。

確定公司通過 UDDI 提供的 Web 服務。
下一步,確定公司要在公共 UDDI 節(jié)點上注冊的 Web 服務。這項服務有多個訪問點嗎?是否要給使用此 Web 服務的客戶提供其他必需的參數(shù)和信息?

注意,在 UDDI 上注冊 Web 服務并不意味著每個人都有訪問權(quán)??梢詾?UDDI 注冊表條目依次設置安全、授權(quán)和身份驗證。僅知道 Web 服務的存在并不意味著就可以實際調(diào)用該服務。在授權(quán)訪問 Web 服務之前,公司之間通常需要進行一些額外的交流。

為服務確定適當?shù)姆诸悺?BR>
如同可以將公司分類一樣,也可以將 Web 服務分類。因此,公司可能按商業(yè)級別被分類為 NAICS: Software Publisher (51121),而其旅館預約 Web 服務的服務級別可能被分類為 NAICS: Hotels and Motels (72111)。

步驟 2:注冊 UDDI 條目

在完成建模之后,下一步就是注冊您的公司。您需要獲取一個可訪問 UDDI 注冊表的帳號,這不能通過編程來完成,因為必須要同意“使用規(guī)定”聲明。Microsoft 節(jié)點使用 Passport 進行驗證,您需要獲取一份 Passport (http://www.passport.com/Consumer/default.asp) (英文)來完成注冊。

這里有兩種選擇:使用 Microsoft 節(jié)點提供的 Web 用戶界面,或者通過使用 SOAP API 調(diào)用節(jié)點自身以編程進行注冊。如果不希望更改注冊表條目,或條目相對簡單,則使用 Web 用戶界面就足夠了。但是,如果希望頻繁更新,或條目很復雜,請使用 Microsoft UDDI SDK 制作注冊過程的腳本。另外,由于沒有針對其他語言對 Microsoft 用戶界面進行本地化,所以如果想利用 UDDI API 的多語言功能,需要通過編程的方法進行注冊。

注意:您可以在模擬環(huán)境中練習注冊過程,地址是 http://test.uddi.microsoft.com/default.aspx(英文),這是實際投入使用節(jié)點的復本。這對于在正式使用之前熟悉注冊過程很有幫助。

使用 Microsoft 的 Web 用戶界面

使用 Microsoft 的 Web 用戶界面來注冊是一個相對直觀的過程。首先導航至管理員頁面 http://uddi.microsoft.com/administer.aspx(英文)。登錄后,將顯示注冊 tModel 和公司的選項。下面是繼續(xù)操作時需要了解的幾個事項:

在注冊服務之前,確保將 WSDL 文件注冊為 tModel,因為在以后的過程中會需要 tModel。

將 WSDL 文檔注冊為 tModel 時,應該使用“UDDI 類型分類法”對 tModel 分類。至少應將 WSDL 分類為“Specification for a Web Service”(wsdlSpec)。

使用這種分類方法,可以確保 tModel 的分類符合“Using WSDL in a UDDI Registry”最佳實踐文檔(英文)的原則。因為 tModel 能包含對 WSDL 文件以外的文檔的引用,所以給 tModel 提供一些分類是很重要的。很多工具(例如 Visual Studio .NET)靠這些分類來縮小查詢的結(jié)果集。

將 WSDL 接口注冊為 tModel 后,需要給公司業(yè)務添加相應的聯(lián)系信息以及分類信息。只要您認為合適,可以添加任意多的分類。

繼續(xù)添加要通過 UDDI 公開的 Web 服務。因為服務可以有多種實現(xiàn),所以需要給每個添加的服務添加一個綁定。對于每個綁定,需要提供 Web 服務的訪問點,即 < http://www.mycompany.com/SampleWebService.asmx>。

每個綁定都需要為所支持的接口創(chuàng)建一個引用。Microsoft UI 將這些作為“規(guī)范簽名”來調(diào)用。規(guī)范簽名就是包含 WSDL 接口的 tModel。Microsoft UI 會提供一個屏幕,允許您基于其 URN 來搜索 tModel。這個 tModel 可以是在步驟 1 中注冊的,也可以是別人注冊的 WSDL 文件的 tModel。

最后,系統(tǒng)會顯示選項,要求提供一個關(guān)于特定 Web 服務的概述文檔的 HTTP 地址,以及任何相關(guān)的實例參數(shù)。

使用 Microsoft UDDI .NET SDK 編程進行注冊

注冊過程的另一種選擇是通過編程進行注冊。使用 Microsoft UDDI SDK 可以輕而易舉地完成該過程。您必須使用 Web UI 獲取一個 UDDI 帳號。完成該任務后,其余過程就交給腳本來處理。首先,下載并安裝 UDDI SDK,地址是 http://www.microsoft.com/downloads/release.asp?ReleaseID=30880(英文)。然后,使用 Visual Studio .NET 創(chuàng)建一個新的 C# 控制臺應用程序。添加一個對 Microsoft UDDI SDK dll 的引用,其默認安裝位置是 C:Program FilesMicrosoft UDDI SDKVS7Microsoft.Uddi.Sdk.dll。然后,在代碼頂部添加一些名稱空間引用:

using Microsoft.Uddi;
using Microsoft.Uddi.Binding;
using Microsoft.Uddi.Business;
using Microsoft.Uddi.Service;
using Microsoft.Uddi.ServiceType;

在 static void Main (string[] args) 函數(shù)中添加下列代碼:

// 您最好先運行這個程序,在 https://test.uddi.microsoft.com/publish
// 上進行注冊測試
Publish.Url = "https://uddi.microsoft.com/publish";
Publish.User = "您的帳戶";
Publish.Password = "************";

這將為您的帳戶建立身份驗證。下一步,添加以下代碼將 WSDL 文件發(fā)布為 tModel:

// 創(chuàng)建 tModel
SaveTModel stm = new SaveTModel();
stm.TModels.Add();
stm.TModels[0].Name = "此處插入 URN";
stm.TModels[0].Descriptions.Add("zh","此處插入說明");
stm.TModels[0].OverviewDoc.OverviewURL = "此處插入 WSDL 的 URL";
// 下一行是給 tModel 正確分類所必需的
stm.TModels[0].CategoryBag.Add
( "uddi-org:types",
"wsdlSpec",
"uuid:c1acf26d-9672-4404-9d70-39b756e62ab4" );

string sTModelKey = "";

// 發(fā)送到 UDDI
try
{
TModelDetail tmd = stm.Send();
sTModelKey = tmd.TModels[0].TModelKey;
}
catch (UddiException ue)
{
Console.WriteLine ( ue.Message );
return;
}
catch (Exception e)
{
Console.WriteLine ( e.Message );
return;
}

成功保存后,UDDI 將生成一個新的唯一的 tModelKey,以后在 Web 服務的綁定中需要用到它。下一步,創(chuàng)建公司條目:

// 創(chuàng)建公司
SaveBusiness sb = new SaveBusiness();
sb.BusinessEntities.Add();
sb.BusinessEntities[0].Name = "此處插入公司名稱";
sb.BusinessEntities[0].Descriptions.Add("zh","此處插入說明");

// 創(chuàng)建公司服務
sb.BusinessEntities[0].BusinessServices.Add();
sb.BusinessEntities[0].BusinessServices[0].Name = "此處插入服務名稱";
sb.BusinessEntities[0].BusinessServices[0].Descriptions.
Add("zh","此處插入服務說明");

// 創(chuàng)建綁定模板
sb.BusinessEntities[0].BusinessServices[0].BindingTemplates.Add();
sb.BusinessEntities[0].BusinessServices[0].BindingTemplates[0].
Description.Add("zh","此處插入綁定說明");
sb.BusinessEntities[0].BusinessServices[0].BindingTemplates[0].
AccessPoint.Text = "此處插入訪問點";
sb.BusinessEntities[0].BusinessServices[0].BindingTemplates[0].
AccessPoint.URLType = Microsoft.Uddi.Api.URLTypeEnum.Http;

// 創(chuàng)建 tModel 實例信息
sb.BusinessEntities[0].BusinessServices[0].BindingTemplates[0].
TModelInstanceDetail.TModelInstanceInfos.Add();
sb.BusinessEntities[0].BusinessServices[0].BindingTemplates[0].
TModelInstanceDetail.TModelInstanceInfos[0].Descriptions.
Add("zh","此處插入說明");
// 使用上面的 tModelKey 字符串
sb.BusinessEntities[0].BusinessServices[0].BindingTemplates[0].
TModelInstanceDetail.TModelInstanceInfos[0].TModelKey = sTModelKey;


// 發(fā)送到 UDDI
try
{
BusinessDetail bd = sb.Send();
// 顯示 xml
Console.WriteLine ( bd );
}
catch (UddiException ue)
{
Console.WriteLine ( ue.Message );
return;
}
catch (Exception e)
{
Console.WriteLine ( e.Message );
return;
}

此時,WSDL 定義和公司信息都已經(jīng)保存到了 UDDI 中。通過傳遞適當?shù)逆I,以后您可以隨時編輯這些條目。

步驟 3:在 UDDI 中搜索條目
在 UDDI 中注冊條目后,進行以下三種檢查是比較有意義的。第一,使用 Microsoft Web 用戶界面,根據(jù)名稱和分類來搜索您的公司,確認其存在于返回的結(jié)果集中。第二,打開 Visual Studio .NET 并確保它是通過“Add Web Reference”對話框顯示的。如果沒有顯示,則可能沒有正確使用上述的 uddi-org:types 分類法對您的 tModel 進行分類。您應該能將 Web 服務添加到工程中,并基于 WSDL 文件生成代理代碼。第三,等待 24 小時,您的條目將復制到 IBM 節(jié)點上,這可以通過其 UI 來查詢,地址是 https://www-3.ibm.com/services/uddi/protect/find(英文)。

總結(jié)

UDDI 和 WSDL 作為免費的規(guī)范,可以幫助建立基于 Web 服務的軟件系統(tǒng)。WSDL 提供了與供應商無關(guān)的正式方法來定義 Web 服務,這樣便可以實現(xiàn)下一代遠程過程調(diào)用。而 UDDI 提供了一種廣泛的、標準化的基礎結(jié)構(gòu),允許人們?nèi)ッ枋龊桶l(fā)現(xiàn) Web 服務。這兩個標準的結(jié)合將帶來一個繁榮的 Web 服務生態(tài)系統(tǒng)。

瀏覽:使用UDDI的Web服務描述和發(fā)現(xiàn)(第二部分)

發(fā)布:2007-03-25 10:28    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章: