Ejecutar el ejemplo Servicio web

El ejemplo Servicio Web tiene dos partes:

Ejecutar el ejemplo Sistema principal de servicio web

Cuando se ejecuta el ejemplo Sistema principal de servicio web, el intermediario recibe un mensaje SOAP/XML través del protocolo HTTP y devuelve un mensaje de respuesta SOAP/XML utilizando de nuevo HTTP. Por lo tanto, el intermediario actúa como sistema principal de servicio web.

El intermediario toma datos de dicho mensaje SOAP y genera un nuevo mensaje correlacionado como un archivo de cabecera C. Éste se envía a una aplicación heredada utilizando WebSphere MQ. La aplicación heredada responde y los datos de su respuesta se transfieren a la respuesta de HTTP que genera el intermediario. Por lo tanto, la aplicación heredada ha tratado la aplicación heredada como un servicio web.

Para ejecutar el ejemplo Sistema principal de servicio web:

  1. Inicie la aplicación heredada.

    La aplicación heredada está escrita en C y se inicia con dos parámetros de entrada : un nombre de gestor de colas y un nombre de cola de WebSphere MQ. La aplicación lee mensajes de la cola y el gestor de colas y envía respuestas a la cola y al gestor de colas especificados en la información de respuesta del mensaje de entrada.

    Se facilitan dos versiones ejecutables de la aplicación heredada:

    El ejemplo se ha configurado para ejecutar la aplicación heredada utilizando el mismo gestor de colas WebSphere MQ que el intermediario. Si el intermediario utiliza un gestor de colas distinto para la aplicación heredada, configure los gestores de colas WebSphere MQ (intermediario y heredado) para la intercomunicación.

    También deberá cambiar MQOutput por el nodo heredado en el flujo de mensajes WSHOST_WSHOST1. Establezca la propiedad Básica Nombre de gestor de colas en el nombre del gestor de colas de la aplicación heredada.

    Si desea ejecutar la aplicación heredada e una plataforma distinta de Windows o Linux, los archivos de origen se encuentran en el proyecto WSHOST_LEGACY. El archivo de origen C es legacyservice.c, con los archivos de cabecera legacyservice.h y legacyservice2.h. Realice la compilación con el compilador que prefiera y después ejecute la aplicación siguiendo las directrices de arriba para los parámetros de entrada.

    Los mensajes de entrada y de salida están correlacionados con esta estructura C:

    typedef struct tagIA81CONF {
       char MessageId[8];
       char OrderNumber[8];
       char ItemReference[12];
       char ItemQuantity[8];
       char CustomerNumber[12];
       char DeliveryRef[8];
       char Confirm[1];
       char filler1[3];
    } IA81CONF;
    

    Se facilita en el archivo legacyservice.h del proyecto WSHOST_LEGACY. Observe que este archivo de cabecera contiene también otras estructuras.

  2. Transfiera un mensaje SOAP al URL especificado en el nodo HTTPInput. Si no tiene ningún programa de utilidad que lo haga, hay varias herramientas de software gratuito disponibles.

    Todos los mensajes de prueba utilizados para la ejecución de este ejemplo se basan en el siguiente formato:

    <?xml version="1.0" encoding="UTF-8"?>
    <soapenv:Envelope 	xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:c="http://www.brokersamplewshost.ibm.com"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <soapenv:Body>
            <c:IA81CONFIN>
                <MessageId>IA81CONF</MessageId>
                <OrderNumber>ON4002</OrderNumber>
                <ItemReference>IY4003</ItemReference>
                <ItemQuantity>4</ItemQuantity>
                <CustomerNumber>CY4004</CustomerNumber>
                <DeliveryRef> </DeliveryRef>
                <Confirm> </Confirm>
                <filler1> </filler1>
            </c:IA81CONFIN>
        </soapenv:Body>
    </soapenv:Envelope>

Descripción de los resultados

El ejemplo Host de servicio web llama a una aplicación heredada con un mensaje llamado msg_tagIA81CONF. En ese mensaje, un campo llamado DeliveryRef se establece en blanco en la entrada y se establece en JOHNCORP en la salida. Del mismo modo, un campo llamado Confirm se establece en blanco en la entrada y, en la salida, se establece en Y o N, dependiendo de si el campo de entrada ItemReference contiene el carácter Y.

El mensaje de respuesta del mensaje de entrada de arriba es el siguiente:

<?xml version="1.0"?>
<tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:NS1="http://www.brokersamplewshost.ibm.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <tns:Body>
        <NS1:IA81CONFOUT>
            <MessageId>IA81CONF</MessageId>
            <OrderNumber>ON4002</OrderNumber>
            <ItemReference>IY4003</ItemReference>
            <ItemQuantity>4</ItemQuantity>
            <CustomerNumber>CY4004</CustomerNumber>
            <DeliveryRef>JOHNCORP</DeliveryRef>
            <Confirm>Y</Confirm>
            <filler1>   </filler1>
        </NS1:IA81CONFOUT>
    </tns:Body>
</tns:Envelope>

Ejecutar el ejemplo Cliente de servicio web

Cuando se ejecuta el ejemplo Cliente de servicio web, el intermediario recibe un mensaje en formato heredado a través del protocolo WebSphere MQ. Llama a un servicio Web enviando un mensaje SOAP/XML utilizando el protocolo HTTP. Recibe una respuesta del servicio Web como un mensaje SOAP/XML, de nuevo utilizando HTTP, y devuelve un mensaje de respuesta heredado, utilizando MQ. Por lo tanto, el intermediario actúa como cliente de servicio web.

El intermediario toma datos del mensaje heredado, que se correlaciona con un archivo de cabecera C. Estos datos se utilizan para crear un mensaje SOAP/XML, que se correlaciona con el esquema XML en un archivo WSDL. El archivo lo ha proporcionado un host de servicio Web y se ha importado en un conjunto de mensajes en el intermediario. Aquí, el host de servicio Web es el ejemplo Host de servicio Web.

Para ejecutar el ejemplo Cliente de servicio web, debe estar en ejecución el ejemplo Host de servicio Web.

Para ejecutar el ejemplo Cliente de servicio web:

  1. El flujo de mensajes supone que el ejemplo Host de servicio Web se está ejecutando en el mismo intermediario que el ejemplo Cliente de servicio web, y que el intermediario está utilizando el número de puerto HTTP predeterminado 7080. Si no es así, corrija localhost y/o el número de puerto en el nodo HTTPRequest del flujo de mensajes para dirigir el Host de servicio web. Deberá volver a compilar y desplegar el archivo bar, WSCLIENT.bar, en el intermediario. Este archivo se encuentra en el proyecto de flujo de mensajes WSCLIENT_MFP1. Es posible que tenga que copiarlo en un proyecto de dominios antes de desplegarlo.
  2. Si todavía no lo ha hecho, despliegue el archivo bar, WSHOST.bar, en el intermediario. Este archivo se encuentra en el proyecto de flujo de mensajes WSHOST_MFP1. Es posible que tenga que copiarlo en un proyecto de dominios antes de desplegarlo.
  3. Si todavía no lo ha hecho, inicie la aplicación heredada que el ejemplo Host de servicio web llama (ver más arriba).
  4. Ponga un mensaje en la cola WebSphere MQ que está definida en el nodo MQInput (el nombre de cola es WSCLIENT1_IN1).

    Los mensajes de prueba de entrada utilizados para la ejecución de este ejemplo se basan en el siguiente formato:

    typedef struct tagIA81BUY {
       char MessageId[8];
       char OrderNumber[8];
       char ItemReference[12];
       char ItemQuantity[8];
       char CustomerNumber[12];
       char DeliveryRef[8];
    } IA81BUY;
    

    El mensaje enviado al flujo de mensajes de Host de servicio web es el siguiente:

    
    <?xml version="1.0"?>
    <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:NS1="http://schemas.xmlsoap.org/soap/encoding/"
        xmlns:NS2="http://www.brokersamplewshost.ibm.com"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:mrm="http://tempuri.org/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <tns:Body>
            <NS2:IA81CONFIN>
                <MessageId>IA81CONF</MessageId>
                <OrderNumber>LAB51234</OrderNumber>
                <ItemReference>ITEM12345678</ItemReference>
                <ItemQuantity>qty00005</ItemQuantity>
                <CustomerNumber>CUST34567890</CustomerNumber>
                <DeliveryRef> </DeliveryRef>
                <Confirm> </Confirm>
                <filler1> </filler1>
            </NS2:IA81CONFIN>
        </tns:Body>
    </tns:Envelope>
    

Descripción de los resultados

El mensaje de respuesta recibido por el flujo de mensajes de Cliente de servicio web para el mensaje de entrada anterior, es el siguiente:

<?xml version="1.0"?>
<tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:NS1="http://www.brokersamplewshost.ibm.com"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <tns:Body>
        <NS1:IA81CONFOUT>
            <MessageId>IA81CONF</MessageId>
            <OrderNumber>LAB51234</OrderNumber>
            <ItemReference>ITEM12345678</ItemReference>
            <ItemQuantity>qty00005</ItemQuantity>
            <CustomerNumber>CUST34567890</CustomerNumber>
            <DeliveryRef>JOHNCORP</DeliveryRef>
            <Confirm>N</Confirm>
            <filler1>   </filler1>
        </NS1:IA81CONFOUT>
    </tns:Body>
</tns:Envelope>

El mensaje de respuesta

El flujo de mensajes de Cliente de servicio web genera el mensaje anterior en formato CWF. Se basa en la estructura C tagIA81CONF, definida más arriba. Los campos y los valores son los siguientes:

typedef struct tagIA81CONF {
   char MessageId[8];           IA81CONF
   char OrderNumber[8];         LAB5123
   char ItemReference[12];      ITEM12345678
   char ItemQuantity[8];        qty00005
   char CustomerNumber[12];     CUST34567890
   char DeliveryRef[8];         JOHNCORP
   char Confirm[1];             N
   char filler1[3];
} IA81CONF;

Icono de la página principal   Volver a la Página de presentación de ejemplos