帳號:
密碼:
最新動態
產業快訊
CTIMES / 文章 /
UDDI整合打造無疆界的資訊時代
 

【作者: 姚巧玫,胡百敬】   2005年03月01日 星期二

瀏覽人次:【7490】

長久以來,我們期待無疆界資訊時代的到來,但由於資訊界各廠商間的技術一直壁壘分明,導致系統間的整合難如登天。雖說整合這條路難如登天,卻是我們提升資訊系統價值必走的下一步。


由於W3C的努力,XML(Extensible Markup Language)除了增強簡化企業間的資料交換外,也提供我們新的希望;而資訊界的巨頭們合作推出的SOAP(Simple Object Access Protocol)通訊協定,也使應用程式間無須考慮彼此使用的是什麼樣的程式語言,以及底層使用的分散式物件結構,透過網際網路呼叫各種服務。…這些振奮人心的技術讓大家認識到,早先由於電子商務的標準不同而產生的成本已經顯著降低了,也因為有了這些技術和標準,原來難以處理的問題,現在變得較容易解決。


UDDI發展歷程

現今許多企業選擇使用Web服務來定義各部門內部的應用基礎架構,以及與合作夥伴間進行線上交易。假使每個公司都根據本身的經驗,得出自己特有的一套服務架構,可預見的結果就是相同的產業裡,各企業對商業行為的描述與作法將會各自不同。當這些分佈於不同企業或部門中的系統要溝通時,需要將不相容的部分進行整合,這會耗費巨大的代價。為了提供標準的分類、註冊、查詢等服務,領導廠商如微軟、IBM 等再度攜手制定了UDDI(Universal Description、Discovery and Integration)服務。


UDDI計畫是在2000年秋天、由Ariba、IBM與微軟共同創立。該服務利用XML 以及SOAP通訊協定,在2.0版定義了約40個SOAP訊息,使網路服務提供者或使用者可以在UDDI上登錄和搜尋服務,或讓Web服務程式自動讀取UDDI的目錄,尋找完成交易所需要的相關資訊。UDDI商業註冊中心的目的就是為了實現服務搜尋,進而促進企業Web服務的發展,並為企業提供一個便利的平台,以利於找尋同業或異業間適當的Web服務。


UDDI的規格原由UDDI.org組織所制定,2002年7月30日後由OASIS(Organization for the Advancement of Structured Information Standards)結構資訊標準促進組織接手。在UDDI架構下,軟體廠商和程式開發人員都可以依此標準,讓各自的應用程式共同運作。UDDI的第二版,提供了在Web服務目錄附加類別的功能。根據OASIS 表示,這可以讓企業辨識UDDI的內容,了解企業的產業別、產品種類、地理位置等資訊。OASIS的UDDI技術委員會現在也正在準備定出第三版的UDDI規範。在第三版當中,將會提供各UDDI服務供應商彼此間互連的登錄系統;並加上數位簽章以增強UDDI的安全性。第三版的UDDI可能會讓服務導向架構(services-oriented architectures,SOA)這種新的軟體設計方式更快被接受。


在服務導向架構當中,不管Web服務是用什麼作業系統或程式語言開發,都可以共享資訊。這樣一來,Web服務就成為「鬆散(loosely coupled)」架構,只在需要時和其他Web服務連結,UDDI目錄服務也會因此更具價值。未來,它不會只是一個可有可無的選擇,而是一個必要的組成元素。


UDDI提供的基本功能

UDDI的設計目的是補充現有線上交易和搜索引擎的不足,為電子商務和服務發現機制提供標準的格式。我們也可以把UDDI想像成商業應用程式的DNS服務,而UDDI的服務則可分為供應商所需的發佈服務與使用者想要取得特定服務的搜尋兩種功能。一是UDDI規範中沒有直接涉及具體的商業流程搜尋,例如找出某個價格;或在特定地理區域內提供某種產品或服務的企業。也就是說進一步地需求配對,買方和賣方都需要更多地合作與設計。而UDDI為定義上層應用服務提供了基礎架構。加入UDDI後,整體Web服務參與者協同合作的關係如(圖一)所示。


《圖一 Web Service 的提供者,使用者以及UDDI三者之間的關係。》
《圖一 Web Service 的提供者,使用者以及UDDI三者之間的關係。》

圖一中各角色的互動模式分述如下,


  • Web服務提供者:Web服務提供者向UDDI註冊它所提供的服務(Publish)。


  • Web服務使用者:使用者端應用程式在UDDI尋找特定的Web服務,找到服務之後,應用程式直接在線上動態地存取該Web服務。


  • Web服務仲介:也就是UDDI服務,讓提供者可以發布他所建置的Web服務,使用者可以查詢所需的服務。



企業可以通過UDDI商業註冊中心的網頁介面,直接透過人來互動操作,或是以應用程式存取實作「UDDI Programmer's API標準」的程式介面之服務,來將資訊加入到UDDI商業註冊中心。UDDI商業註冊中心在邏輯上是集中的,但在實體世界中卻是分散的,由多個節點組成,相互之間按一定規則進行資料同步。當企業在UDDI商業註冊中心的某個節點註冊後,其註冊資訊會自動複製到其他UDDI節點,於是就能被任何希望存取這些Web服務的人所發現。


UDDI服務透過一組標準或自訂的分類方式,提供發人員一個找尋個別服務的機制,以達成重複運用的目的。這可以改善開發人員和IT人員的生產力,導致更低的總體擁有成本(TCO)和更可信賴、容易管理的應用程式。


UDDI實作

一般來說,應用程式或程式設計師經由UDDI商業註冊中心獲得Web服務的位置及其技術資訊。其中對於程式設計師來說,是讓該系統能依規格存取所需的Web服務。或是描述自己的Web服務規格,從而能讓別人使用。


從商業層次上來說,UDDI商業註冊中心可以用於查詢合作夥伴是否擁有特定的Web服務之程式存取介面,或是找出相關行業中能提供某類服務的公司,並確定合作夥伴之Web服務技術規格,以瞭解呼叫該Web服務所需的細節。


至目前為止,公開在網際網路上提供UDDI服務的有微軟和IBM兩家公司。微軟所提供的公共UDDI服務畫面如(圖二)所示,使用者可以互動登入的方式,透過網頁直接進行註冊與查詢的工作。或是從微軟網站下載.NET存取UDDI的類別,透過程式來與UDDI合作,以便註冊與查詢相關的服務。


《圖二 微軟在網際網路上提供的公眾UDDI服務。》
《圖二 微軟在網際網路上提供的公眾UDDI服務。》

微軟在Visual Studio.NET開發環境的「起始頁」中,「XML Web Services」頁籤就是用來支援UDDI服務,讓你查詢可用的Web服務,並同時建立該Web服務的代理程式,或是註冊自己的Web服務到UDDI,其設定畫面如(圖三)所示。


《圖三 Visual Studi.NET 2003在起始頁提供的「線上資源」頁籤內,透過「XML Web Service」存取微軟在網際網路上提供的UDDI服務。》
《圖三 Visual Studi.NET 2003在起始頁提供的「線上資源」頁籤內,透過「XML Web Service」存取微軟在網際網路上提供的UDDI服務。》

目前除了可以使用微軟在網路上免費提供的公共UDDI服務之外,也可在 Windows 2003版本自行架設UDDI服務。各公司可以建立自己的UDDI服務,提供自家人或合作夥伴查詢可用的Web服務。Windows 2003預設提供UDDI Services元件供使用者安裝。透過「控制台」內的「新增或移除程式」對話窗,點選「新增/移除Windows元件」叫出如(圖四)的對話窗便可選擇「UDDI Services」。


《圖四 安裝Windows 2003預設提供的UDDI服務。》
《圖四 安裝Windows 2003預設提供的UDDI服務。》

點選(圖四)中的「詳細資料」按鈕,可以看到如(圖五)所表列實際安裝的相關元件。


《圖五 UDDI Services所安裝的相關元件。》
《圖五 UDDI Services所安裝的相關元件。》

若欲透過微軟的.NET程式語言存取UDDI服務,則需要先安裝該公司所提供的UDDI SDK。它並不是獨立包裝的檔案,而是內含在Windows Server 2003 Platform SDK套裝內,完整的內容可以從微軟網站下載並安裝。


筆者現在就簡單示範存取UDDI的Visual Basic.NET程式碼。首先透過Visual Studio.NET開啟一個新的主控台應用程式專案,並設定參考Microsoft.UDDI類別庫,其Assembly位置在C:\Program Files\Microsoft SDK\Bin\Microsoft.Uddi.dll。


對UDDI服務註冊與刪除紀錄的程式範例如下:



Imports Microsoft
Imports Microsoft.Uddi
Imports Microsoft.Uddi.Services
Imports Microsoft.Uddi.TModels '使用 tModel 類別會參照到此命名空間
Imports Microsoft.Uddi.Businesses 'Contact 會參照到
Imports Microsoft.Uddi.Extensions 'UddiSiteLocation 會參照到

Module Module1

    Sub Main()
        '安裝本機 UDDI 時所設定的 UDDI Web Service 位置
        Dim strUrl As String = "http://localhost/uddi/"
        Dim loc As New UddiSiteLocation( _
        strUrl & "inquire.asmx", _
        strUrl & "publish.asmx", _
        strUrl & "extension.asmx", _
        "測試 UDDI 網站", AuthenticationMode.WindowsAuthentication)
        Dim cnnUddi As New UddiConnection(loc)

        Dim cul As System.Globalization.CultureInfo = System.Globalization.CultureInfo.CurrentUICulture

        '先註冊 tModel
        Dim strtModelKey As String
        Dim tMod As New TModel
        With tMod
            .Name = New Uddi.Name("我的 tModel", cul)
            .Descriptions.Add("測試用的 tModel")
            .OverviewDoc.OverviewUrl = "http://localhost/ReportServer/ReportService.asmx?wsdl"
            .OverviewDoc.Descriptions.Add("測試用的 Web Service 之 WSDL")

            Dim savMod As New SaveTModel(tMod)
            Dim tmodDetail As New TModelDetail
            tmodDetail = savMod.Send(cnnUddi)
            strtModelKey = tmodDetail.TModels(0).TModelKey  '取回 tModel Key,這是 UDDI 服務產生的 uuid 格式
        End With

        '註冊商務
        '設定聯絡人
        Dim cnt As New Contact
        With cnt
            .PersonName = "姚巧玫"
            .Emails.Add("sandy.yao@udngroup.com")
            .Descriptions.Add("技術顧問", cul)
        End With
        Dim cnt2 As New Contact
        With cnt2
            .PersonName = "胡百敬"
            .Emails.Add("byron_hu@uuu.com.tw")
            .Descriptions.Add("技術顧問", cul)
        End With
        '商務服務的描述
        Dim bus As New BusinessEntity(New Uddi.Name("第一類服務", cul))
        With bus
            .Descriptions.Add("利用微軟技術設計、開發與調教系統", cul)
            .Contacts.Add(cnt)
            .Contacts.Add(cnt2)
        End With
        Dim savBus As New SaveBusiness(bus)
        Dim strBDKey As String = savBus.Send(cnnUddi).BusinessEntities(0).BusinessKey


        '註冊實際服務的細節,聯繫到上述的商務之下,同時透過 tModel 定義架構細節
        Dim tModIns As New TModelInstanceInfo(strtModelKey)
        tModIns.Descriptions.Add("參照某個服務定義的 tModel", cul)

        Dim bidTemp As New BindingTemplate
        With bidTemp
            .Descriptions.Add("終有一天會想到的 Web 服務", cul)
            .AccessPoint = New AccessPoint("http://someServer/SomeWebService", UrlType.Http)
            .TModelInstanceInfos.Add(tModIns)
        End With
        Dim busSer As New BusinessService("技術顧問服務")
        With busSer
            .BusinessKey = strBDKey   '歸類在前一項的商務服務描述之下
            .BindingTemplates.Add(bidTemp)
        End With
        Dim savSer As New SaveService(busSer)
        Dim bs As ServiceDetail = savSer.Send(cnnUddi)
        Dim strBizKey As String = bs.BusinessServices(0).BusinessKey
        Console.WriteLine(bs.ToString())  '檢視用 XML 描述的服務細節

        Console.WriteLine("註冊成功,你可以透過 http://localhost/uddi 搜尋。" & _
        vbCrLf & "按 Enter 鍵後刪除剛才建立的商業服務")
        Console.ReadLine()

        Dim delBiz As New DeleteBusiness(strBizKey)
        delBiz.Send(cnnUddi)

        Console.WriteLine("刪除商業服務成功。" & _
        vbCrLf & "按 Enter 鍵後刪除剛才建立的 tModel")
        Console.ReadLine()

        Dim deltMod As New DeleteTModel(strtModelKey)
        deltMod.Send(cnnUddi)
        Console.WriteLine("刪除 tModel 成功。" & _
        vbCrLf & "按 Enter 鍵後結束")
        Console.ReadLine()
    End Sub
End Module

直接執行上述程式碼後,透過瀏覽器檢視UDDI服務的註冊結果如(圖六)。


《圖六 透過程式在 Windows 2003所附的UDDI服務中註冊。》
《圖六 透過程式在 Windows 2003所附的UDDI服務中註冊。》

由於UDDI整體註冊的資料結構有些複雜,因此在查詢資料時,往往要先組成整體的物件結構,再以For迴圈逐步取出各類資料,限於篇幅,在此筆者不予深入討論。安裝完Windows Server 2003 Platform SDK後,預設在C:\Program Files\Microsoft SDK\Samples\UDDI目錄下有完整的範例,若有興趣,你可以自行進一步研究。在此僅以示範查詢UDDI時的存取架構提供簡單的範例程式碼。



Imports Microsoft
Imports Microsoft.Uddi
Imports Microsoft.Uddi.Extensions '使用 UddiSiteLocation 類別是會參照到此命名空間

Module Inquire
    Sub Main()
        '安裝本機 UDDI 時所設定的 UDDI Web Service 位置
        Dim strUrl As String = "http://localhost/uddi/"
        Dim loc As New UddiSiteLocation( _
        strUrl & "inquire.asmx", _
        strUrl & "publish.asmx", _
        strUrl & "extension.asmx", _
        "測試 UDDI 網站", AuthenticationMode.WindowsAuthentication)
        Dim cnnUddi As New UddiConnection(loc)

        Dim fs As New FindService("技術顧問服務")
        Dim sl As ServiceList = fs.Send(cnnUddi)
        If sl.ServiceInfos.Count = 0 Then
            Console.WriteLine("找不到所指定的服務名稱")
            Return
        ElseIf sl.Truncated = True Then
            Console.WriteLine("符合的紀錄過多,UDDI 服務停止輸出結果,請找尋更精確的服務名稱")
        Else
            Console.WriteLine(sl.ToString())
        End If

        Dim gsd As New GetServiceDetail(sl.ServiceInfos(0).ServiceKey)
        Dim sd As ServiceDetail = gsd.Send(cnnUddi)
        Console.WriteLine(vbCrLf & vbCrLf & sd.ToString())

        '取得你所要的 Web 服務所在位置
        Console.WriteLine(vbCrLf & "取得服務的位置:" & _
        sd.BusinessServices(0).BindingTemplates(0).AccessPoint.Text)

        Dim strtModelKey As String = sd.BusinessServices(0).BindingTemplates(0).TModelInstanceInfos(0).TModelKey
        Dim gtmd As New GetTModelDetail(strtModelKey)
        Dim tmd As TModelDetail = gtmd.Send(cnnUddi)
        Console.WriteLine(vbCrLf & vbCrLf & tmd.ToString())

        '取得 tModel 該類服務的說明文件,例如 WSDL
        Console.WriteLine(vbCrLf & "tModel 的說明文件所在位置:" & _
        tmd.TModels(0).OverviewDoc.OverviewUrl)

        Console.WriteLine("按下 Enter 鍵結束")
        Console.ReadLine()
    End Sub
End Module

上述程式碼的執行結果如下所示:



<?xml version="1.0" encoding="utf-8"?>
<serviceList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" operator="UDDI" truncated="false" generic="2.0" xmlns="urn:uddi-org:api_v2">
  <serviceInfos>
    <serviceInfo serviceKey="355c5bf6-c5a1-46a6-8930-3c74050ce596" businessKey="f9d6ffaf-926d-4b12-9f4a-01fe9d8d1a44">
      <name xml:lang="en">技術顧問服務</name>
    </serviceInfo>
  </serviceInfos>
</serviceList>

<?xml version="1.0" encoding="utf-8"?>
<serviceDetail xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" operator="UDDI" truncated="false" generic="2.0" xmlns="urn:uddi-org:api_v2">
  <businessService serviceKey="355c5bf6-c5a1-46a6-8930-3c74050ce596" businessKey="f9d6ffaf-926d-4b12-9f4a-01fe9d8d1a44">
    <name xml:lang="en">技術顧問服務</name>
    <bindingTemplates>
      <bindingTemplate serviceKey="355c5bf6-c5a1-46a6-8930-3c74050ce596" bindingKey="d5120fea-f66c-4829-bf0d-342148a88b71">
        <description xml:lang="zh-TW">終有一天會想到的 Web 服務</description>
        <accessPoint URLType="http">http://someServer/SomeWebService</accessPoint>
        <tModelInstanceDetails>
          <tModelInstanceInfo tModelKey="uuid:2b4378b4-69a2-485b-8e4e-da8270c9a650">
            <description xml:lang="zh-TW">參照某個服務定義的 tModel</description>
          </tModelInstanceInfo>
        </tModelInstanceDetails>
      </bindingTemplate>
    </bindingTemplates>
  </businessService>
</serviceDetail>

取得服務的位置:http://someServer/SomeWebService

<?xml version="1.0" encoding="utf-8"?>
<tModelDetail xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" operator="UDDI" generic="2.0" truncated="false" xmlns="urn:uddi-org:api_v2">
  <tModel tModelKey="uuid:2b4378b4-69a2-485b-8e4e-da8270c9a650" operator="UDDI" authorizedName="WIN2003CHT\Administrator">
    <name>我的 tModel</name>
    <description xml:lang="en">測試用的 tModel</description>
    <overviewDoc>
      <description xml:lang="en">測試用的 Web Service 之 WSDL</description>
      <overviewURL>http://localhost/myWebService/service1.asmx?wsdl</overviewURL>
    </overviewDoc>
  </tModel>
</tModelDetail>

其它相關tModel的說明文件可參照http://localhost/myWebService/service1.asmx?wsdl。


UDDI的現況與未來

日前曾在新聞上看到IBM與日本電信巨人NTT的子公司NTT Com(NTT Communications)合作建置公眾的UDDI服務,預計這將可加速亞太區B2B電子商務市場的發展。NTT Com是第一家在亞太地區建置與經營公眾UDDI服務的業者。使用IBM WebSphere平台提供該服務,並以DB2作為資料儲存中心。


同時,IBM也推出WebSphere旗下最新版的網路服務開發工具;亦可讓企業建置內部專屬的UDDI服務。也就是說IBM與微軟兩大陣營都有UDDI的開發與建置環境。


如前文所述,UDDI資料庫是全球性的商業目錄,它將可供各企業登錄其業務內容與服務項目、描述、發現及整合其他企業的業務及服務內容。UDDI的營運者會定期更新全球其他UDDI節點的商業登錄資料,以便將網路服務的觸角延伸至全球使用者,目前已有IBM、惠普、微軟及SAP四家UDDI公眾資料庫經營者,NTT將是第五家、也是亞太區第一家相關服務業者。


UDDI目前雖然受到業界廣泛的支持,兩大軟體廠商IBM和Microsoft都全力在推動這個規範,但是到目前為止OASIS並未公佈第三版UDDI會在何時完成標準化,因此它還不是一個開放的標準。UDDI工作小組正在計畫對規範草案進行擴展,加入目錄服務搜尋以外的內容。


而UDDI將來的特性將包括對產品或服務進行定位的能力、定義網路服務的實現模式、提供對商業組織,及團體和貿易集團的分層結構進行管理的能力。未來的發展方向將是使UDDI支援更複雜的商業邏輯為目標,針對B2B(商家到商家)和M2M(市場到市場),為網路服務合作提供一個公共規範。而由於參與UDDI商業註冊乃免費服務,Forrester Research分析師便認為UDDI仍具有風險,因為目前UDDI並不具獲利模式,故參與廠商極有可能隨時抽身,建立自己的專屬版本。儘管如此,分析師仍強調UDDI仍具有相當的成長空間。


相關文章
汽車微控制器技術為下一代車輛帶來全新突破
擺明搶聖誕錢!樹莓派500型鍵盤、顯示器登場!
Arduino新品:UNO SPE擴充板,隨插即用UNO R4實現超高數據傳輸、即時連結
以馬達控制器ROS1驅動程式實現機器人作業系統
推動未來車用技術發展
相關討論
  相關新聞
» 精誠「Carbon EnVision雲端碳管理系統」獲台灣精品獎銀質獎 善盡企業永續責任 賺有意義的錢
» 善用「科技行善」力量 精誠集團旗下奇唯科技榮獲「IT Matters 社會影響力產品獎」
» 昕力資訊展現台灣科技實力 參與台灣、波蘭衛星應用合作發展MOU
» 工研院MWC 2024展會直擊:5G-A通訊、全能助理成下一波AI風潮
» 經部「2023玩學5G新視界」 領台灣網通產業躍上國際舞台


刊登廣告 新聞信箱 讀者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 遠播資訊股份有限公司版權所有 Powered by O3  v3.20.2048.3.128.30.199
地址:台北數位產業園區(digiBlock Taipei) 103台北市大同區承德路三段287-2號A棟204室
電話 (02)2585-5526 #0 轉接至總機 /  E-Mail: webmaster@ctimes.com.tw