分享
 
 
 

UDDI:一种XMLWeb服务

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

作者:Chris Lovett

UDDI 查询示例(需要 Internet Explorer 5.x)

通用描述、发现和集成 (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 提供的 XMLHTTP 控件,如下所示:

http = new ActiveXObject("Microsoft.XMLHTTP");

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 确实在正确的方向上前进了一大步。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有