UDDI :一种 XML Web 服务
通用描述、發現和集成 (UDDI) 服務(英文)目前可以直接運行于 Microsoft、IBM 和 Ariba。這是一種聯機 Web 服務,可在應用程序中用來動態發現其他聯機服務。該服務全部被巧妙地打包在一個簡單的 XML 接口中。
對于有經驗的 XML 讀者,在客戶端應用程序和中間層服務器之間傳遞 XML 根本不是什么新鮮事。我們從 1998 年開始就這么做。但是,我們也很高興能看到行業在這個方向上開發出象 UDDI 一樣有用的其他服務。
所以,讓我們專注于基本事實。您真正需要了解的是可以向其張貼 XML 的 URL。我們經過努力,找到了以下三個 URL:
- http://uddi.microsoft.com/inquire
- http://uddi.ariba.com/UDDIProcessor.aw/ad/process
- http://www-3.ibm.com/services/uddi/inquiryapi
它們是用于“查詢”的 UDDI 入口點。用于更新的入口點與它們不一樣,并且通常出于安全原因而使用 HTTPS 地址。
張貼什么樣的 XML?
首先,XML 必須是 UTF-8(由 UDDI 項目精心簡化)格式的,并且必須包裝在 SOAP 信封中。SOAP 信封看上去如下所示:
<?xml version='1.0' encoding='UTF-8'?> <Envelope xmlns='http://schemas.xmlsoap.org/soap/envelope/'> <Body>?lt;/Body> </Envelope>元素的內容可以是來自 uddi 架構(英文)的任何查詢。例如,以下查詢,當置于 SOAP 信封中時將返回有關 Microsoft 的詳細信息:
<find_business generic="1.0" xmlns="urn:uddi-org:api"> <name>Microsoft</name> </find_business>注意:我們將名稱空間從 SOAP 名稱空間切換到“urn:uddi-org:api”名稱空間。在 find_business 查詢中還可以執行許多其他操作。
如何張貼 XML?
您可以在 JScript 文件或 HTML 頁面中使用 MSXML 提供的 ServerXMLHTTP 控件,如下所示:
http = new ActiveXObject("Microsoft.ServerXMLHTTP"); http.open("POST", url, false); http.setRequestHeader("Accept","text/xml"); http.setRequestHeader("Cache-Control","no-cache"); http.setRequestHeader("SOAPAction",'""'); http.send(msg);在本例中,我決定做一個好 SOAP 公民,因而在 HTTP 標頭中設置 SoapAction。因為每次我都需要動態結果,所以我還決定只接受 text/xml 結果,并且關閉所有緩存。當然,在附加的示例代碼中,我是通過就緒狀態變化回叫來異步完成這些操作的。
返回什么內容?
當然是 XML。在這種情況下,您獲得當前為 Microsoft 注冊的 <businessInfo> 元素的詳細列表,包括有關 UDDI 服務本身的信息。
<businessList generic="1.0" operator="Microsoft Corporation" truncated="false" xmlns="urn:uddi-org:api"> <businessInfos> <businessInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"> <name>Microsoft Corporation</name> <description xml:lang="en">以優秀軟件給人力量——隨時,隨地,在任何 設備上——這就是 Microsoft 的目標。作為 全球領先的個人和商務軟件廠商,我們致力于 提供創新的產品和服務,滿足我們客戶的需求</description> <serviceInfos> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="1FFE1F71-2AF3-45FB-B788-09AF7FF151A4"> <name>智能搜索 Web 服務</name> </serviceInfo> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="8BF2F51F-8ED4-43FE-B665-38D8205D1333"> <name>電子商務綜合服務</name> </serviceInfo> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="611C5867-384E-4FFD-B49C-28F93A7B4F9B"> <name>批量授權選擇程序</name> </serviceInfo> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="5DE3CE59-923E-42D3-B7FB-34FC3C3CBC16"> <name>Technet</name> </serviceInfo> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="24E553C3-7E3E-484A-8ECA-80E0D0B4A91F"> <name>Microsoft 開發人員網絡</name> </serviceInfo> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="77DD86E5-CD70-4219-A28C-37231EAF3901"> <name>聯機購物</name> </serviceInfo> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="0860E130-D4AF-4BD5-9F5C-D7F6FA4B1AD8"> <name>主頁</name> </serviceInfo> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1"> <name>UDDI Web 服務</name> </serviceInfo> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="A8E4999A-21A3-47FA-802E-EE50A88B266F"> <name>UDDI Web 站點</name> </serviceInfo> </serviceInfos> </businessInfo> </businessInfos> </businessList>在這里,您可以反復查詢并獲得有關某個特定服務的信息。例如,讓我們反復查詢 UDDI Web 服務。您可以從上面的結果中獲得 businessKey,并且用 <find_service> 來按名稱查找一個服務:
<find_service generic='1.0' xmlns='urn:uddi-org:api' businessKey='0076B468-EB27-42E5-AC09-9955CFF462A3'> <name>UDDI Web 服務</name> </find_service>這將返回有關此服務的信息:
<serviceList generic="1.0" operator="Microsoft Corporation" truncated="false" xmlns="urn:uddi-org:api"> <serviceInfos> <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1"> <name>UDDI Web 服務</name> </serviceInfo> </serviceInfos> </serviceList>然后,您可用 serviceKey 來獲得有關這項服務的詳細信息:
<get_serviceDetail generic='1.0' xmlns='urn:uddi-org:api'> <serviceKey>D2BC296A-723B-4C45-9ED4-494F9E53F1D1</serviceKey> </get_serviceDetail>這將返回下面的 <bindingTemplates>:
<serviceDetail generic="1.0" operator="Microsoft Corporation" truncated="false" xmlns="urn:uddi-org:api"> <businessService businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1"> <name>UDDI Web 服務</name> <description xml:lang="en">基于 UDDI SOAP/XML 消息的可編程 Web 服務接口。</description> <bindingTemplates> <bindingTemplate bindingKey="313C2BF0-021D-405C-8149-25FD969F7F0B" serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1"> <description xml:lang="en">產品 UDDI 服務器,發布接口</description> <accessPoint URLType="https">https://uddi.microsoft.com/publish</accessPoint> <tModelInstanceDetails> <tModelInstanceInfo tModelKey="uuid:64C756D1-3374-4E00-AE83-EE12E38FAE63"> <description xml:lang="en">UDDI SOAP 發布接口</description> </tModelInstanceInfo> </tModelInstanceDetails> </bindingTemplate> <bindingTemplate bindingKey="A9CAFBE4-11C6-4BFE-90F5-595970D3DE24" serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1"> <description xml:lang="en">產品 UDDI 服務器,查詢接口</description> <accessPoint URLType="http">http://uddi.microsoft.com/inquire</accessPoint> <tModelInstanceDetails> <tModelInstanceInfo tModelKey="uuid:4CD7E4BC-648B-426D-9936-443EAAC8AE23"> <description xml:lang="en">UDDI SOAP 查詢接口</description> </tModelInstanceInfo> </tModelInstanceDetails> </bindingTemplate> <bindingTemplate bindingKey="3FE6C834-293E-4341-AF6E-41DC68949764" serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1"> <description xml:lang="en">測試 UDDI 服務器,發布接口</description> <accessPoint URLType="https">https://test.uddi.microsoft.com/publish</accessPoint> <tModelInstanceDetails> <tModelInstanceInfo tModelKey="uuid:64C756D1-3374-4E00-AE83-EE12E38FAE63"> <description xml:lang="en">UDDI SOAP 發布接口</description> </tModelInstanceInfo> <tModelInstanceInfo tModelKey="uuid:F372E009-F372-429C-A09A-794113A5C5F9"> <description xml:lang="en">urn:microsoft-com:test-signature-element 表示這是服務的測試版</description> </tModelInstanceInfo> </tModelInstanceDetails> </bindingTemplate> <bindingTemplate bindingKey="8ED4AD10-C63B-495E-8969-B3938F86E937" serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1"> <description xml:lang="en">測試 UDDI 服務器,查詢接口</description> <accessPoint URLType="http">http://test.uddi.microsoft.com/inquire</accessPoint> <tModelInstanceDetails> <tModelInstanceInfo tModelKey="uuid:4CD7E4BC-648B-426D-9936-443EAAC8AE23"> <description xml:lang="en">UDDI SOAP 查詢接口</description> </tModelInstanceInfo> <tModelInstanceInfo tModelKey="uuid:F372E009-F372-429C-A09A-794113A5C5F9"> <description xml:lang="en">urn:microsoft-com:test-signature-element 表示這是服務的測試版
</description> </tModelInstanceInfo> </tModelInstanceDetails> </bindingTemplate> </bindingTemplates> <categoryBag> <keyedReference keyName="KEYWORD" keyValue="API" tModelKey="uuid:A035A07C-F362-44DD-8F95-E2B134BF43B4"></keyedReference> <keyedReference keyName="KEYWORD" keyValue="SOAP" tModelKey="uuid:A035A07C-F362-44DD-8F95-E2B134BF43B4"></keyedReference> <keyedReference keyName="KEYWORD" keyValue="XML" tModelKey="uuid:A035A07C-F362-44DD-8F95-E2B134BF43B4"></keyedReference> </categoryBag> </businessService> </serviceDetail>
現在,您可以看到我們會獲得有關聯機 Web 服務本身的非常豐富的信息。這段信息告訴我們實際上有四個訪問點,兩個測試訪問點在 http://test.uddi.microsoft.com(英文)上,兩個產品訪問點在 http://uddi.microsoft.com(英文)上。它還告訴我們 UDDI 查詢訪問點是可以通過 HTTP 公開尋址的,而發布訪問點處于 HTTPS 的保護下。
您也可用 tModelKey 信息以查找所有提供 UDDI Web 服務的注冊業務,如下所示:
<find_business generic='1.0' xmlns='urn:uddi-org:api'> <tModelBag><tModelKey>uuid:4CD7E4BC-648B-426D-9936-443EAAC8AE23</tModelKey></tModelBag> </find_business>為 Microsoft 和 IBM 返回 <businessInfos>。沒有返回 Ariba,因為 Ariba <tModelInstanceDetails> 好像還不能使用。
工作效果如何?
我發現 Microsoft 和 Ariba 的兩種實現方案有一些令人煩惱的不同。例如,Ariba 的實現要求 UTF-8 全部大寫,并且不能處理 XML 聲明中的多余的空格。
要使這些服務實現完全的互操作性,必須消除象這樣的問題。我發現響應時間非常令人滿意,但是數據的同步好象有一點問題。我希望同步問題會隨著時間的推移而有所改善。
總結
如果您正在創建需要動態連接至外部業務伙伴所提供服務的應用程序,那么您無疑要考慮將您的應用程序連接至 UDDI 注冊表。請將它想象為業務應用層的 DNS。有意思的是,您可以實時地添加、更改和刪除訪問點,從而解決 DNS 傳播中一個星期或更長時間的延遲。
許多人會問,在 UDDI 目錄中找到一個公司及其注冊服務后要怎么做。確實,UDDI 并不聲稱能解決每件事。企圖說明包含已經創造的每項事物的主要的商家對商家協議,是一項非常繁重的任務,而且幾乎不可能實現。UDDI 的理論是應用程序將知道如何使用某些知名的業務協議來開展業務,并且這些協議要以眾所周知的方式來描述,以便您能夠動態地查找支持該協議的其他業務。另外,您也可以擁有少量知名而可靠的全球業務伙伴,通過他們您可以簡單地使用 UDDI 來查找由其提供的新服務。在這種情況下,您可能早已擁有其他的可靠通道,用于下載連接至每一項服務所需的適配器。
總之,UDDI 確實在正確的方向上前進了一大步。
轉載于:https://www.cnblogs.com/cheatlove/articles/385144.html
總結
以上是生活随笔為你收集整理的UDDI :一种 XML Web 服务的全部內容,希望文章能夠幫你解決所遇到的問題。