Das Beispielprogramm 'Web Service' ausführen

Das Beispielprogramm 'Web Service' besteht aus zwei Teilen:

Beispielprogramm 'Web Service Host' ausführen

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:

  1. Starten Sie die traditionelle Anwendung.

    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. Konfigurieren Sie, wenn Ihr Broker einen anderen Warteschlangenmanager als die traditionelle Anwendung verwendet, Ihre WebSphere MQ-Warteschlangenmanager (die des Brokers und die der traditionellen Anwendung) für die Kommunikation miteinander.

    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.

    Wenn die traditionelle Anwendung auf einer anderen Plattform als Windows oder Linux ausgeführt werden soll, finden Sie die entsprechenden Quellendateien im Projekt WSHOST_LEGACY. 'legacyservice.c' ist die C-Quellendatei, mit den Headerdateien 'legacyservice.h' und 'legacyservice2.h'. Kompilieren Sie diese Dateien mit einem Compiler Ihrer Wahl, und führen Sie die Anwendung anschließend aus; beachten Sie dabei die Hinweise oben zu den Eingabeparametern.

    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.

  2. Senden Sie eine SOAP-Nachricht an die im HTTPEmpfangsknoten angegebene URL. Wenn Sie kein Dienstprogramm hierfür haben, stehen mehrere Freeware-Tools zur Verfügung.

    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>
                <DeliveryRef> </DeliveryRef>
                <Confirm> </Confirm>
                <filler1> </filler1>
            </c:IA81CONFIN>
        </soapenv:Body>
    </soapenv:Envelope>

Erläuterung der Ergebnisse

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.

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>
            <filler1>   </filler1>
        </NS1:IA81CONFOUT>
    </tns:Body>
</tns:Envelope>

Das Beispielprogramm 'Web Service Client' ausführen

Beim Ausführen des Beispielprogramms 'Web Service Client' empfängt der Broker über das WebSphere MQ-Protokoll eine Nachricht im traditionellen Format. Sie ruft durch Senden einer SOAP/XML-Nachricht über das HTTP-Protokoll einen Web-Service auf. Sie empfängt, wieder über HTTP, eine Web-Service-Antwort als SOAP/XML-Nachricht und sendet eine traditionelle Antwortnachricht über MQ zurück. Der Broker verhält sich also wie ein Web Service Client.

Der Broker verwendet Daten der traditionellen Nachricht, die einer C-Headerdatei zugeordnet wird. Unter Verwendung von Daten aus dieser Datei wird eine SOAP/XML-Nachricht erstellt, die dem XML-Schema in einer WSDL-Datei zugeordnet wird. Die WSDL-Datei wurde durch einen Web-Service-Host bereitgestellt und in eine Nachrichtengruppe in dem Broker importiert. Hier ist das Beispielprogramm 'Web Service Host' der Web-Service-Host.

Das Beispielprogramm 'Web Service Host' muss aktiv sein, damit das Beispielprogramm 'Web Service Client' ausgeführt werden kann.

So führen Sie das Beispielprogramm 'Web Service Client' aus:

  1. Der Nachrichtenfluss geht davon aus, dass das Beispielprogramm 'Web Service Host' auf dem selben Broker ausgeführt wird wie das Beispielprogramm 'Web Service Client' und dass der Broker die Standard-HTTP-Portnummer 7080 verwendet. Ist dies nicht der Fall, müssen Sie den lokalen Host und/oder die Portnummer in dem HTTPAnforderungsknoten des Nachrichtenflusses entsprechend anpassen, um den 'Web Service Host' zu adressieren. Sie müssen dann die BAR-Datei 'WSCLIENT.bar' neu kompilieren und in den Broker implementieren. Diese Datei befindet sich im Nachrichtenflussprojekt 'WSCLIENT_MFP1'. Es kann notwendig sein, sie zuerst in ein Domänenprojekt zu kopieren, bevor sie implementiert werden kann.
  2. Implementieren Sie, falls nicht bereits geschehen, die BAR-Datei WSHOST.bar' in den Broker. Diese Datei befindet sich im Nachrichtenflussprojekt 'WSHOST_MFP1'. Es kann notwendig sein, sie zuerst in ein Domänenprojekt zu kopieren, bevor sie implementiert werden kann.
  3. Starten Sie, falls nicht bereits geschehen, die traditionelle Anwendung, die durch das Beispielprogramm 'Web Service Host' aufgerufen wird (siehe oben).
  4. Reihen Sie eine Nachricht in die WebSphere MQ-Warteschlange ein, die in dem MQEmpfangsknoten definiert ist (Warteschlangenname ist WSCLIENT1_IN1).

    Die Eingabetestnachrichten, die beim Ausführen dieses Beispielprogramms verwendet werden, basieren auf folgendem Format:

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

    Die folgende Nachricht wurde an den Nachrichtenfluss des 'Web Service Host' gesendet:

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

Erläuterung der Ergebnisse

Auf die obige Eingabenachricht wurde die folgende Antwortnachricht durch den Nachrichtenfluss des 'Web Service Client' empfangen:

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

Die Antwortnachricht

Die obige Nachricht wird durch den Nachrichtenfluss des 'Web Service Client' im CWF-Format ausgegeben. Dieses Format basiert auf der oben definierten C-Struktur 'tagIA81CONF'. Die Felder und Werte lauten wie folgt:

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;

Symbol für die Hauptseite   Zurück zum Beginn des Beispielprogramms