Beim Ausführen des Beispielprogramms 'Web Service Host' empfängt der Broker über das HTTP-Protokoll eine SOAP/XML- Nachricht und sendet eine SOAP/XML-Antwortnachricht über HTTP wieder zurück. Der Broker verhält sich also wie ein Web-Service.
Der Broker erstellt anhand der Daten der SOAP-Nachricht eine neue Nachricht, die einer C-Headerdatei zugeordnet wird. Diese Nachricht wird über WebSphere MQ an die traditionelle Anwendung gesendet. Die traditionelle Anwendung sendet daraufhin eine Antwortnachricht, deren Daten in die vom Broker generierte HTTP-Antwort eingesetzt werden. Der Broker hat es also einer traditionellen Anwendung ermöglicht, wie ein Web-Service zu agieren.
So führen Sie das Beispielprogramm 'Web Service Host' aus:
Die traditionelle Anwendung ist in C geschrieben und wird mit zwei Eingabeparametern gestartet, nämlich dem Namen eines WebSphere MQ-Warteschlangenmanagers und dem Namen einer Warteschlange. Die Anwendung liest Nachrichten aus dieser Warteschlange und aus diesem Warteschlangenmanager und sendet Antworten an die Warteschlange und den Warteschlangenmanager, die in den Antwortinformationen der Eingabenachricht angegeben wurden.
Es werden zwei ausführbare Versionen der traditionellen Anwendung bereitgestellt:
Das Beispielprogramm ist so konfiguriert, dass die traditionelle Anwendung denselben WebSphere MQ-WS-Manager wie der Broker verwendet. Verwendet der Broker einen anderen Warteschlangenmanager als die traditionelle Anwendung, müssen die WebSphere MQ-Warteschlangenmanager (die des Brokers und die der traditionellen Anwendung) für die Kommunikation miteinander konfiguriert werden.
Darüber hinaus müssen Sie auch am MQSendeknoten an traditionelle Anwendung im Nachrichtenfluss WSHOST_WSHOST1 eine kleine Änderung vornehmen. Setzen Sie die Basiseigenschaft Name des WS-Managers auf den Namen des Warteschlangenmanagers der traditionellen Anwendung.Sowohl die Eingabe- als auch Ausgabenachricht wird der folgenden C-Struktur zugeordnet:
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;
Diese steht in der Datei 'legacyservice.h' im Projekt WSHOST_LEGACY. Diese Headerdatei enthält noch weitere Strukturen.
Alle Testnachrichten, die beim Ausführen dieses Beispielprogramms verwendet werden, basieren auf folgendem Format:
<?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>
Das Beispielprogramm 'Web Service Host' ruft eine traditionelle Anwendung mit der Nachricht msg_tagIA81CONF auf. In dieser Nachricht bleibt das Feld 'DeliveryRef' bei der Eingabe leer, bei der Ausgabe wird es auf JOHNCORP gesetzt. Das Feld 'Confirm' bleibt bei der Eingabe ebenfalls leer, und wird bei der Ausgabe auf Y oder N gesetzt, je nachdem ob das Eingabefeld 'ItemReference' das Zeichen Y enthält oder nicht.
Wenn Sie 'NetTool' verwenden, wird die HTTP-Antwort im rechten Teilfenster angezeigt.
Die Antwortnachricht auf die oben angegebene Eingabenachricht lautet wie folgt:
<?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>