Quando si esegue l'esempio Host servizio Web, il broker riceve un messaggio SOAP/XML sul protocollo HTTP e restituisce un messaggio SOAP/XML, utilizzando ancora HTTP. Quindi, il broker agisce come un host servizio Web.
Il broker estrae i dati da questo messaggio SOAP e genera un nuovo messaggio corrispondente al file di intestazione C. Questo messaggio viene inviato ad un'applicazione legacy tramite WebSphere MQ. L'applicazione legacy risponde e i dati ricavati da questa risposta vengono inseriti nella risposta HTTP generata dal broker. Quindi il broker ha considerato un'applicazione legacy alla stregua di un servizio Web.
Per eseguire l'esempio Host servizio Web:
L'applicazione legacy è scritta in linguaggio C e viene avviata con due parametri di input: un nome gestore code WebSphere MQ ed un nome coda. L'applicazione legge i messaggi da questa coda e da questo gestore code ed invia risposte alla coda e al gestore code specificati nelle informazioni relative alla risposta del messaggio di input.
Vengono fornite due versioni eseguibili dell'applicazione legacy:
L'esempio è configurato per eseguire l'applicazione legacy utilizzando lo stesso gestore code WebSphere MQ del broker. Se il broker sta utilizzando un gestore code differente rispetto all'applicazione legacy, sarà necessario configurare i gestori code WebSphere MQ (broker e legacy) per la comunicazione reciproca.
E' anche necessario apportare una piccola modifica a MQOutput nel nodo legacy nel flusso di messaggi WSHOST_WSHOST1. Impostare la proprietà Base Nome gestore code sul nome del gestore code dell'applicazione legacy.I messaggi sia di input che di output corrispondono alla seguente struttura 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;
Questa struttura viene fornita nel file legacyservice.h del progetto WSHOST_LEGACY. Si noti che questo file di intestazione contiene anche altre strutture
Tutti i messaggi di prova utilizzati nell'esecuzione di questo esempio si basano sul seguente 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> </c:IA81CONFIN> </soapenv:Body> </soapenv:Envelope>
L'esempio Host servizio Web richiama un'applicazione legacy con un messaggio denominato msg_tagIA81CONF. In tale messaggio, un campo denominato DeliveryRef rimane vuoto nell'input e nell'output è impostato su JOHNCORP. Inoltre, un campo denominato Confirm rimane vuoto nell'input e nell'output è impostato su Y o N, a seconda che il campo di input ItemReference contenga o meno il carattere Y.
Se si sta utilizzando Nettool, il pannello sulla destra contiene la risposta HTTP.
Il messaggio di risposta che deriva dal messaggio di input riportato sopra è il seguente:
<?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> </NS1:IA81CONFOUT> </tns:Body> </tns:Envelope>