Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Chris Lovett
Microsoft Corporation
18 décembre 2000
Contenu
Quel code XML publiez-vous ?
Comment publier le code XML ?
Qu’est-ce que tu obtiens en retour ?
Comment fonctionne-t-il ?
Conclusion
Exemple d’exploration UDDI (nécessite Internet Explorer 5.x)
Le service UDDI (Universal Description, Discovery, and Integration) est désormais opérationnel chez Microsoft, IBM et Ariba. Il s’agit d’un service web en ligne que vous pouvez utiliser à partir de vos applications pour découvrir dynamiquement d’autres services en ligne, le tout soigneusement empaqueté dans une interface XML simple.
Pour les lecteurs XML extrêmes, la transmission de XML entre l’application cliente et les serveurs de niveau intermédiaire n’est pas une nouveauté. Nous le faisons depuis 1998. Il est toutefois agréable de voir l’élan continu de l’industrie dans cette direction qui se traduit par des services utiles comme celui-ci.
Alors laissez-moi plonger directement dans le nitty-gritty. Tout ce que vous devez vraiment savoir, c’est l’URL sur laquelle publier le xml. Il a fallu creuser pour trouver les trois URL suivantes :
- http://uddi.microsoft.com/inquire
- http://uddi.ariba.com/UDDIProcessor.aw/ad/process
- http://www-3.ibm.com/services/uddi/inquiryapi
Il s’agit des points d’entrée UDDI pour « ENQUÊTES ». Les points d’entrée des mises à jour sont différents et sont généralement des adresses HTTPS pour des raisons de sécurité.
Quel code XML publiez-vous ?
Tout d’abord, le XML doit être en UTF-8 (une simplification délibérée effectuée par le projet UDDI) et doit être encapsulé dans une enveloppe SOAP. L’enveloppe SOAP ressemble à ceci :
<?xml version='1.0' encoding='UTF-8'?>
<Envelope xmlns='https://schemas.xmlsoap.org/soap/envelope/'>
<Body>...</Body>
</Envelope>
Le contenu de l’élément <Body> peut être n’importe quelle requête du schéma uddi. Par exemple, la requête suivante, lorsqu’elle est placée dans le <corps> de l’enveloppe SOAP retourne les détails sur Microsoft :
<find_business generic="1.0" xmlns="urn:uddi-org:api">
<name>Microsoft</name>
</find_business>
Notez que nous basculons les espaces de noms de l’espace de noms SOAP vers l’espace de noms « urn:uddi-org:api ». Il existe de nombreuses autres choses que vous pouvez effectuer dans une requête find_business.
Comment publier le code XML ?
À partir d’un fichier JScript ou d’une page HTML, vous pouvez utiliser le contrôle XMLHTTP fourni par MSXML comme suit :
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);
Dans ce cas, j’ai décidé d’être un bon citoyen SOAP en définissant soapAction dans l’en-tête HTTP. J’ai également décidé d’accepter uniquement les résultats texte/xml et de désactiver toute la mise en cache, car je veux des résultats en direct à chaque fois. Bien sûr, dans mon exemple de code joint, je le fais de façon asynchrone à l’aide du rappel onreadystatechange.
Qu’est-ce que tu obtiens en retour ?
Bien sûr, XML. Dans ce cas, vous obtenez une liste détaillée des <éléments businessInfo> actuellement enregistrés pour Microsoft, qui inclut des informations sur le service UDDI lui-même.
<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">Empowering people through great software -
any time, any place and on any device is Microsofts vision. As the worldwide
leader in software for personal and business computing, we strive to produce
innovative products and services that meet our customer's </description>
<serviceInfos>
<serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
serviceKey="1FFE1F71-2AF3-45FB-B788-09AF7FF151A4">
<name>Web services for smart searching</name>
</serviceInfo>
<serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
serviceKey="8BF2F51F-8ED4-43FE-B665-38D8205D1333">
<name>Electronic Business Integration Services</name>
</serviceInfo>
<serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
serviceKey="611C5867-384E-4FFD-B49C-28F93A7B4F9B">
<name>Volume Licensing Select Program</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 Developer Network</name>
</serviceInfo>
<serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
serviceKey="77DD86E5-CD70-4219-A28C-37231EAF3901">
<name>Online Shopping</name>
</serviceInfo>
<serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
serviceKey="0860E130-D4AF-4BD5-9F5C-D7F6FA4B1AD8">
<name>Home Page</name>
</serviceInfo>
<serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
<name>UDDI Web Services</name>
</serviceInfo>
<serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
serviceKey="A8E4999A-21A3-47FA-802E-EE50A88B266F">
<name>UDDI Web Sites</name>
</serviceInfo>
</serviceInfos>
</businessInfo>
</businessInfos>
</businessList>
À partir de là, vous pouvez explorer et obtenir des informations sur un service spécifique. Par exemple, nous allons explorer le service web UDDI. Vous pouvez utiliser businessKey à partir des résultats ci-dessus et utiliser <find_service> pour rechercher un service par nom :
<find_service generic='1.0' xmlns='urn:uddi-org:api'
businessKey='0076B468-EB27-42E5-AC09-9955CFF462A3'>
<name>UDDI Web Services</name>
</find_service>
Cette opération retourne les informations relatives à ce 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 Services</name>
</serviceInfo>
</serviceInfos>
</serviceList>
Vous pouvez ensuite utiliser serviceKey pour obtenir les détails sur ce service particulier :
<get_serviceDetail generic='1.0' xmlns='urn:uddi-org:api'>
<serviceKey>D2BC296A-723B-4C45-9ED4-494F9E53F1D1</serviceKey>
</get_serviceDetail>
Cette opération retourne les bindingTemplates> suivants <:
<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 Services</name>
<description xml:lang="en">UDDI SOAP/XML message-based programmatic web
service interfaces.</description>
<bindingTemplates>
<bindingTemplate bindingKey="313C2BF0-021D-405C-8149-25FD969F7F0B"
serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
<description xml:lang="en">Production UDDI server,
Publishing interface</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 Publication Interface</description>
</tModelInstanceInfo>
</tModelInstanceDetails>
</bindingTemplate>
<bindingTemplate bindingKey="A9CAFBE4-11C6-4BFE-90F5-595970D3DE24"
serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
<description xml:lang="en">Production UDDI server, Inquiry interface</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 Inquiry Interface</description>
</tModelInstanceInfo>
</tModelInstanceDetails>
</bindingTemplate>
<bindingTemplate bindingKey="3FE6C834-293E-4341-AF6E-41DC68949764"
serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
<description xml:lang="en">Test UDDI server, Publishing interface</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 Publication Interface</description>
</tModelInstanceInfo>
<tModelInstanceInfo tModelKey="uuid:F372E009-F372-429C-A09A-794113A5C5F9">
<description xml:lang="en">urn:microsoft-com:test-signature-element -
signifies that this is a testing version of the service</description>
</tModelInstanceInfo>
</tModelInstanceDetails>
</bindingTemplate>
<bindingTemplate bindingKey="8ED4AD10-C63B-495E-8969-B3938F86E937"
serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
<description xml:lang="en">Test UDDI server, Inquiry interface</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 Inquiry Interface</description>
</tModelInstanceInfo>
<tModelInstanceInfo tModelKey="uuid:F372E009-F372-429C-A09A-794113A5C5F9">
<description xml:lang="en">urn:microsoft-com:test-signature-element -
signifies that this is a testing version of the service</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>
Maintenant, vous pouvez voir que nous commençons à obtenir des informations très riches sur le service web en ligne lui-même. Cela nous indique qu’il y a en fait quatre points d’accès, deux points d’accès de test sur http://test.uddi.microsoft.com et deux points d’accès de production sur http://uddi.microsoft.com. Il nous indique également que les points d’accès d’enquête UDDI sont adressables publiquement via HTTP et que les points d’accès de publication sont sous protection HTTPS.
Vous pouvez également utiliser les informations tModelKey pour rechercher toutes les entreprises inscrites qui fournissent un serice web UDDI comme suit :
<find_business generic='1.0' xmlns='urn:uddi-org:api'>
<tModelBag><tModelKey>uuid:4CD7E4BC-648B-426D-9936-443EAAC8AE23</tModelKey></tModelBag>
</find_business>
Cela retourne les <informations businessInfos> pour Microsoft et IBM. Ariba n’est pas retourné, car ariba <tModelInstanceDetails> ne semble pas encore disponible.
Comment fonctionne-t-il ?
J’ai constaté qu’il existe des différences ennuyeuses entre les implémentations Microsoft et Ariba. Par exemple, l’implémentation d’Ariba nécessite que UTF-8 soit en majuscules et ne peut pas gérer d’espace blanc supplémentaire dans la déclaration XML.
Des bizarreries comme celle-ci devront être aérées pour que ces services deviennent entièrement interopérables. J’ai trouvé que les temps de réponse sont assez bons, mais les données semblent être un peu désynchronisées. J’espère que la synchronisation s’améliore au fil du temps.
Conclusion
Si vous créez des applications qui doivent être montées dynamiquement vers des services fournis par des partenaires commerciaux externes, vous devez certainement envisager de connecter vos applications au registre UDDI. Considérez-le comme s’il s’agissait d’un DNS pour la couche d’application métier. Ce qui est intéressant, c’est que vous pouvez ajouter, modifier et supprimer des points d’accès en temps réel et ainsi contourner le délai d’une semaine ou plus impliqué dans la propagation DNS.
Beaucoup de gens se demandent ce qu’il faut faire après avoir trouvé une entreprise et ses services enregistrés dans l’annuaire UDDI. Eh bien, UDDI ne prétend pas tout résoudre. Tenter de specer le master protocole interentreprises qui englobe tout ce qui a jamais été inventé est une entreprise énorme et ne se produira probablement jamais. La théorie UDDI est que vos applications sauront comment faire des affaires avec certains types bien connus de protocoles métier, et ces protocoles seront décrits d’une manière bien connue afin que vous puissiez trouver dynamiquement d’autres entreprises qui prennent en charge ce protocole. Vous pouvez également avoir un petit nombre de partenaires commerciaux mondiaux de confiance bien connus avec lesquels vous utilisez simplement UDDI pour trouver de nouveaux services fournis par ces partenaires. Dans ce cas, vous disposez probablement déjà d’autres canaux approuvés pour télécharger les adaptateurs nécessaires à la connexion à chaque service.
Bottom line: UDDI est certainement un grand pas dans la bonne direction.
Chris Lovett est responsable de programme pour l’équipe XML de Microsoft.