UDDI: ein XML-Webdienst
Chris Lovett
Microsoft Corporation
18. Dezember 2000
Contents
Welche XML-Datei posten Sie? Wie stellen Sie die XML-Datei ein? Was erhalten Sie zurück? Wie gut funktioniert es? Schlussfolgerung
UDDI-Drilldownbeispiel (Erfordert Internet Explorer 5.x)
Der Universelle Beschreibungs-, Discovery- und Integrationsdienst (UDDI) ist jetzt auf Microsoft, IBM und Ariba ausgeführt. Dies ist ein Onlinewebdienst, den Sie von Ihren Anwendungen verwenden können, um andere Onlinedienste dynamisch zu entdecken, alle in eine einfache XML-Schnittstelle verpackt.
Für Extreme XML-Leser ist das Übergeben von XML zwischen Clientanwendung und mittleren Servern nichts Neues. Seit 1998 haben wir dies getan. Es ist jedoch schön zu sehen, dass die fortlaufende Branchendynamik in dieser Richtung zu sehen ist, die zu nützlichen Diensten wie diesem führt.
Lassen Sie mich also einfach direkt in die Nitty-gritty tauchen. Alles, was Sie wirklich wissen müssen, ist die URL, um die XML-Datei zu posten. Es dauerte einige Diggings, um die folgenden drei URLs zu finden:
- http://uddi.microsoft.com/inquire
- http://uddi.ariba.com/UDDIProcessor.aw/ad/process
- http://www-3.ibm.com/services/uddi/inquiryapi
Dies sind die UDDI-Einstiegspunkte für "ANFRAGEN". Die Einstiegspunkte für Updates unterscheiden sich und sind in der Regel HTTPS-Adressen aus Sicherheitsgründen.
Welche XML-Datei posten Sie?
Zunächst muss sich die XML in UTF-8 (eine absichtliche Vereinfachung des UDDI-Projekts) befindet und in einen SOAP-Umschlag umgebrochen werden. Der SOAP-Umschlag sieht wie folgt aus:
<?xml version='1.0' encoding='UTF-8'?>
<Envelope xmlns='https://schemas.xmlsoap.org/soap/envelope/'>
<Body>...</Body>
</Envelope>
Der Inhalt des Body-Elements> kann eine beliebige Abfrage aus dem <Uddi-Schema sein. Beispielsweise gibt die folgende Abfrage beim Einfügen im <Textkörper> des SOAP-Umschlags die Details zu Microsoft zurück:
<find_business generic="1.0" xmlns="urn:uddi-org:api">
<name>Microsoft</name>
</find_business>
Beachten Sie, dass wir Namespaces vom SOAP-Namespace in den Namespace "urn:uddi-org:api" wechseln. Es gibt viele andere Dinge, die Sie in einer find_business Abfrage tun können.
Wie stellen Sie die XML-Datei ein?
Nun, aus einer JScript Datei oder HTML-Seite können Sie das XMLHTTP-Steuerelement verwenden, das von MSXML wie folgt bereitgestellt wird:
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);
In diesem Fall habe ich beschlossen, ein guter SOAP-Bürger zu sein, indem ich die SoapAction im HTTP-Header festlegen. Ich habe auch beschlossen, nur Text-/XML-Ergebnisse zu akzeptieren und alle Zwischenspeicherung zu deaktivieren, da ich jedes Mal Liveergebnisse möchte. Natürlich mache ich in meinem angefügten Beispielcode diese asynchrone Verwendung des Onreadystatechange-Rückrufs.
Was erhalten Sie zurück?
Nun, XML natürlich. In diesem Fall erhalten Sie eine detaillierte Auflistung der <derzeit für Microsoft registrierten BusinessInfo-Elemente> , die Informationen über den UDDI-Dienst selbst enthalten.
<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>
Von hier aus können Sie drillen und Informationen zu einem bestimmten Dienst erhalten. Beispiel: Drill in den UDDI-Webdienst. Sie können den BusinessKey aus den obigen Ergebnissen nehmen und find_service> verwenden<, um einen Dienst nach Namen nachzuschlagen:
<find_service generic='1.0' xmlns='urn:uddi-org:api'
businessKey='0076B468-EB27-42E5-AC09-9955CFF462A3'>
<name>UDDI Web Services</name>
</find_service>
Dadurch werden die Informationen zu diesem Dienst zurückgegeben:
<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>
Anschließend können Sie den ServiceKey verwenden, um die Details zu diesem bestimmten Dienst abzurufen:
<get_serviceDetail generic='1.0' xmlns='urn:uddi-org:api'>
<serviceKey>D2BC296A-723B-4C45-9ED4-494F9E53F1D1</serviceKey>
</get_serviceDetail>
Dies gibt die folgenden <bindingTemplates> zurück:
<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>
Jetzt können Sie sehen, dass wir beginnen, einige sehr umfangreiche Informationen über den Onlinewebdienst selbst zu erhalten. Dies sagt uns, dass es tatsächlich vier Zugriffspunkte, zwei Testzugriffspunkte http://test.uddi.microsoft.com und zwei Produktionszugriffspunkte gibt http://uddi.microsoft.com. Es teilt uns auch mit, dass die UDDI-Untersuchungszugriffspunkte öffentlich über HTTP adressierbar sind und dass die Veröffentlichungszugriffspunkte unter HTTPS-Schutz stehen.
Sie können auch die tModelKey-Informationen verwenden, um alle registrierten Unternehmen zu finden, die eine UDDI Web Serice wie folgt bereitstellen:
<find_business generic='1.0' xmlns='urn:uddi-org:api'>
<tModelBag><tModelKey>uuid:4CD7E4BC-648B-426D-9936-443EAAC8AE23</tModelKey></tModelBag>
</find_business>
Dies gibt die <BusinessInfos> für Microsoft und IBM zurück. Ariba wird nicht zurückgegeben, da die Ariba <tModelInstanceDetails> noch nicht verfügbar sein scheint.
Wie gut funktioniert es?
Ich habe festgestellt, dass es einige nervige Unterschiede zwischen den Microsoft- und Ariba-Implementierungen gibt. Die Ariba-Implementierung erfordert beispielsweise, dass die UTF-8 in Großbuchstaben enthalten ist und keine zusätzliche Leerzeichen in der XML-Deklaration verarbeiten kann.
Quirks wie dies muss abgebügelt werden, damit diese Dienste vollständig interoperabilität werden. Ich habe festgestellt, dass die Antwortzeiten ziemlich gut sind, aber die Daten scheinen etwas nicht synchronisiert zu sein. Ich hoffe, dass die Synchronisierung im Laufe der Zeit besser wird.
Zusammenfassung
Wenn Sie Anwendungen erstellen, die dynamisch an Dienste von externen Geschäftspartnern gebunden werden müssen, müssen Sie definitiv über die Verkabelung Ihrer Anwendungen an die UDDI-Registrierung denken. Denken Sie daran, dass es DNS für die Geschäftsanwendungsebene war. Das Interessante ist, dass Sie Zugriffspunkte in Echtzeit hinzufügen, ändern und entfernen können und dadurch rund um eine Woche oder mehr Verzögerung arbeiten, die an der DNS-Verteilung beteiligt sind.
Viele Leute fragen nach dem Suchen eines Unternehmens und seiner registrierten Dienste im UDDI-Verzeichnis. Nun, UDDI hat keinen Anspruch, alles zu lösen. Versuchen Sie, das Master-Business-to-Business-Protokoll auszuwähnen, das alles jemals erfunden hat, ist ein riesiges Unternehmen und wird wahrscheinlich nie geschehen. Die UDDI-Theorie besteht darin, dass Ihre Anwendungen wissen, wie Sie Unternehmen mit einigen bekannten Geschäftsprotokollen tun, und diese Protokolle werden auf bekannte Weise beschrieben, damit Sie andere Unternehmen dynamisch finden können, die dieses Protokoll unterstützen. Alternativ verfügen Sie möglicherweise über eine kleine Anzahl bekannter, vertrauenswürdiger globaler Geschäftspartner, mit denen Sie einfach UDDI verwenden, um neue Dienste zu finden, die von diesen Partnern bereitgestellt werden. In diesem Fall verfügen Sie wahrscheinlich bereits über andere vertrauenswürdige Kanäle zum Herunterladen der Adapter, die zum Herstellen einer Verbindung mit jedem Dienst erforderlich sind.
Unterzeile: UDDI ist definitiv ein großer Schritt in die richtige Richtung.
Chris Lovett ist ein Programmmanager für das XML-Team von Microsoft.