Share via


UDDI: un servicio web XML

 

Chris Lovett
Microsoft Corporation

18 de diciembre de 2000

Contenido

¿Qué XML publica? ¿Cómo se publica el XML? ¿Qué vuelves? ¿Cómo funciona? Conclusión

Ejemplo de exploración en profundidad de UDDI (requiere Internet Explorer 5.x)

El servicio Universal Description, Discovery, and Integration (UDDI) está en funcionamiento en Microsoft, IBM y Ariba. Se trata de un servicio web en línea que puede usar desde las aplicaciones para detectar dinámicamente otros servicios en línea, todo ello empaquetado perfectamente en una interfaz XML simple.

En el caso de los lectores XML extremos, pasar XML entre servidores de nivel intermedio y aplicación cliente no es nada nuevo. Hemos estado haciendo esto desde 1998. Sin embargo, es agradable ver el impulso continuo de la industria en esta dirección que da como resultado servicios útiles como este.

Así que déjame sumergirme justo en la nitty-gritty. Todo lo que realmente necesita saber es la dirección URL en la que publicar el XML. Se tomó algo de excavación para encontrar las tres direcciones URL siguientes:

Estos son los puntos de entrada UDDI para "CONSULTAS". Los puntos de entrada de las actualizaciones son diferentes y suelen ser direcciones HTTPS por motivos de seguridad.

¿Qué XML publica?

En primer lugar, el XML debe estar en UTF-8 (una simplificación deliberada realizada por el proyecto UDDI) y debe encapsularse en un sobre SOAP. El sobre SOAP tiene el siguiente aspecto:

<?xml version='1.0' encoding='UTF-8'?>
<Envelope xmlns='https://schemas.xmlsoap.org/soap/envelope/'>
<Body>...</Body>
</Envelope>

El contenido del <elemento Body> puede ser cualquier consulta del esquema uddi. Por ejemplo, la siguiente consulta, cuando se coloca dentro del <cuerpo> del sobre SOAP, devuelve los detalles de Microsoft:

<find_business generic="1.0" xmlns="urn:uddi-org:api">
    <name>Microsoft</name>
</find_business>

Observe que cambiamos los espacios de nombres del espacio de nombres SOAP al espacio de nombres "urn:uddi-org:api". Hay muchas otras cosas que puede hacer en una consulta de find_business.

¿Cómo se publica el XML?

Bueno, desde un archivo JScript o una página HTML puede usar el control XMLHTTP proporcionado por MSXML de la siguiente manera:

   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);

En este caso decidí ser un buen ciudadano SOAP estableciendo SoapAction en el encabezado HTTP. También decidí aceptar solo los resultados de texto/xml y desactivar todo el almacenamiento en caché, ya que quiero resultados activos cada vez. Por supuesto, en mi código de ejemplo adjunto, hago esto de forma asincrónica mediante la devolución de llamada onreadystatechange.

¿Qué vuelves?

Bueno, XML por supuesto. En este caso, obtendrá una lista detallada de <los elementos businessInfo> registrados actualmente para Microsoft, que incluye información sobre el propio servicio 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">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>

Desde aquí puede profundizar y obtener información sobre un servicio específico. Por ejemplo, vamos a profundizar en el servicio web UDDI. Puede tomar businessKey de los resultados anteriores y usar <find_service> para buscar un servicio por su nombre:

<find_service generic='1.0' xmlns='urn:uddi-org:api'
    businessKey='0076B468-EB27-42E5-AC09-9955CFF462A3'>
    <name>UDDI Web Services</name>
</find_service>

Esto devuelve la información sobre este servicio:

<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>

Después, puede usar serviceKey para obtener los detalles sobre este servicio en particular:

<get_serviceDetail generic='1.0' xmlns='urn:uddi-org:api'>
    <serviceKey>D2BC296A-723B-4C45-9ED4-494F9E53F1D1</serviceKey>
</get_serviceDetail>

Esto devuelve los siguientes <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 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>

Ahora puede ver que estamos empezando a obtener información muy enriquecida sobre el propio servicio web en línea. Esto nos indica que hay realmente cuatro puntos de acceso, dos puntos de acceso de prueba en http://test.uddi.microsoft.com y dos puntos de acceso de producción en http://uddi.microsoft.com. También nos indica que los puntos de acceso de consulta udDI son direccionables públicamente a través de HTTP y que los puntos de acceso de publicación están bajo protección HTTPS.

También puede usar la información de tModelKey para buscar todas las empresas registradas que proporcionen un servicio web UDDI de la siguiente manera:

<find_business generic='1.0' xmlns='urn:uddi-org:api'>
   <tModelBag><tModelKey>uuid:4CD7E4BC-648B-426D-9936-443EAAC8AE23</tModelKey></tModelBag>
</find_business>

Esto devuelve businessInfos <> para Microsoft e IBM. Ariba no se devuelve porque ariba <tModelInstanceDetails> no parece estar disponible todavía.

¿Cómo funciona?

Encontré que hay algunas diferencias molestas entre las implementaciones de Microsoft y Ariba. Por ejemplo, la implementación de Ariba requiere que UTF-8 esté en mayúsculas y no pueda controlar espacios en blanco adicionales en la declaración XML.

Las peculiaridades como esta tendrán que ser planchadas para que estos servicios se vuelvan totalmente interoperables. He encontrado que los tiempos de respuesta son bastante buenos, pero los datos parecen estar un poco fuera de sincronización. Espero que la sincronización sea mejor con el tiempo.

Conclusión

Si va a compilar aplicaciones que necesitan conectarse dinámicamente a los servicios proporcionados por asociados comerciales externos, definitivamente tiene que pensar en conectar las aplicaciones al registro UDDI. Piense en él como si fuera DNS para el nivel de aplicación empresarial. Lo interesante es que podría agregar, cambiar y quitar puntos de acceso en tiempo real y, por tanto, solucionar una semana o más retrasos implicados en la propagación de DNS.

Muchas personas preguntan qué hacer después de encontrar una empresa y sus servicios registrados en el directorio UDDI. Bueno, UDDI no pretende resolver todo. Intentar especificar el protocolo maestro de negocio a negocio que abarca todo lo que nunca inventó es una gran empresa y probablemente nunca ocurrirá. La teoría de UDDI es que las aplicaciones sabrán cómo hacer negocios con algunos tipos conocidos de protocolos de negocio, y estos protocolos se describirán de una manera conocida para que pueda encontrar dinámicamente otras empresas que admitan ese protocolo. Como alternativa, puede tener un pequeño número de socios empresariales globales de confianza conocidos con los que simplemente usa UDDI para encontrar nuevos servicios proporcionados por esos asociados. En este caso, probablemente ya tenga otros canales de confianza establecidos para descargar los adaptadores necesarios para conectarse a cada servicio.

Línea inferior: UDDI es definitivamente un gran paso en la dirección correcta.

Chris Lovett es un administrador de programas para el equipo XML de Microsoft.