El ejemplo Servicio Web tiene dos partes:
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:
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.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.
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>
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>
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:
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>
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;