Mustercode 'Web Services using HTTP nodes' ausführen

Wenn Sie den Mustercode importieren, erhalten Sie möglicherweise mehrere Warnungen im Toolkit bezüglich Attributen, CWF-Nachrichten, Elementen und der MRM-Domäne. Diese Warnungen beziehen sich auf Nachrichtensätze und beeinträchtigen die Ausführung des Mustercodes nicht.

Der Mustercode 'Web-Services using HTTP nodes' besteht aus zwei Teilen:

Sollten bei der Ausführung des Mustercodes Probleme auftreten, lesen Sie den Abschnitt Probleme bei der Ausführung von Mustercodes beheben in der WebSphere Message Broker-Dokumentation.

Mustercode 'Web Service Host' ausführen

Beim Ausführen des Mustercodes 'Web Service Host' empfängt der Broker über das HTTP-Protokoll eine SOAP/XML-Nachricht und sendet diese wieder zurück. Der Broker verhält sich wie ein Web-Service.

Der Broker erstellt anhand der Daten der SOAP-Nachricht eine neue Nachricht, die einer C-Headerdatei zugeordnet wird. Diese neue Nachricht wird über WebSphere MQ an eine 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 einer traditionellen Anwendung ermöglicht, wie ein Web-Service zu agieren.

So führen Sie den Mustercode '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:

    Der Mustercode ist für die Ausführung der traditionellen Anwendung konfiguriert; dabei wird der Warteschlangenmanager verwendet, der vom Broker verwendet wird und vom Standardkonfigurationsassistenten (MB8QMGR) erstellt wurde. Wenn Ihr Broker einen anderen Warteschlangenmanager als die traditionelle Anwendung verwendet, konfigurieren Sie die WebSphere MQ-Warteschlangenmanager (die des Brokers und die der traditionellen Anwendung) für die Kommunikation miteinander. Sie müssen ebenfalls den MQOutput-Knoten zum traditionellen Knoten im Nachrichtenfluss 'WSHOST_WSHOST1' ändern. Setzen Sie die Basiseigenschaft Name des WS-Managers auf den Namen des Warteschlangenmanagers, der von der traditionellen Anwendung verwendet wird.

    Wenn die traditionelle Anwendung auf einer anderen Plattform als Windows oder Linux ausgeführt werden soll, finden Sie die entsprechenden Quellendateien im Projekt WSHOST_LEGACY1. 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 Struktur steht in der Datei legacyservice.h im Projekt WSHOST_LEGACY1 bereit. Diese Headerdatei enthält noch weitere Strukturen.

  2. Senden Sie eine SOAP-Nachricht an die im HTTPInput-Knoten WSHOST_WSHOST1.msgflow angegebene URL. Wenn Sie kein Dienstprogramm zum Ausführen dieser Aufgabe besitzen, stehen mehrere Freeware-Tools zum Testen von Web-Services und Senden von SOAP-Nachrichten zur Verfügung. Die Mustercode-Nachricht befindet sich in der Datei WSHOST1IN.xml im Projekt 'WSHOST1_MFP1'. Wenn sich der Broker auf demselben System wie das HTTP-Dienstprogramm befindet, muss die Nachricht an http://localhost:7080/samplebrokerwshost gesendet werden. Geben Sie andernfalls den richtigen lokalen Host und die richtige Portnummer an.

    Alle Testnachrichten, die beim Ausführen dieses Mustercodes 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

Der Mustercode '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 leer und wird bei der Ausgabe auf Y oder N gesetzt, je nachdem, ob das Eingabefeld ItemReference das Zeichen Y enthält oder nicht.

Der folgende Code zeigt die Antwortnachricht auf die oben angegebene Eingabenachricht:

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

Mustercode 'Web Service Client' ausführen

Beim Ausführen des Mustercodes '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 über HTTP eine Web-Service-Antwort als SOAP/XML-Nachricht und sendet eine traditionelle Antwortnachricht über WebSphere MQ zurück. Der Broker verhält sich wie ein Web Service Client.

Der Broker verwendet Daten der herstellerspezifischen Nachricht, die einer C-Headerdatei zugeordnet wird. Unter Verwendung dieser Daten 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 einem Nachrichtensatz in dem Broker importiert. Hier ist der Mustercode 'Web Service Host' der Web-Service-Host.

Der Mustercode 'Web Service Host' muss aktiv sein, damit der Mustercode 'Web Service Client' ausgeführt werden kann.

So führen Sie den Mustercode 'Web Service Client' aus:

  1. Der Nachrichtenfluss geht davon aus, dass der Mustercode 'Web Service Host' auf dem selben Broker ausgeführt wird wie der Mustercode 'Web Service Client' und dass der Broker die Standard-HTTP-Portnummer 7080 verwendet. Wird es nicht auf demselben Broker oder mit derselben HTTP-Portnummer ausgeführt, müssen Sie den lokalen Host und/oder die Portnummer in dem HTTPRequest-Knoten 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 Nachrichtenbrokerprojekt 'WSCLIENT_MFP1' unter Brokerarchive. Es kann notwendig sein, die Datei zuerst in ein Domänenprojekt zu kopieren, bevor sie implementiert werden kann.
  2. Implementieren Sie, falls nicht bereits geschehen, die Brokerarchivdatei WSHOST.bar im Broker. Diese Datei befindet sich im Nachrichtenbrokerprojekt '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 den Mustercode 'Web Service Host' aufgerufen wird (weitere Informationen erhalten Sie im Abschnitt 'Mustercode 'Web-Service-Host' ausführen' in diesem Thema).
  4. Reihen Sie eine Nachricht in die WebSphere MQ-Warteschlange ein, die in dem MQInput-Knoten definiert ist; der Warteschlangenname ist 'WSCLIENT1_IN1'.

    Die Eingabetestnachrichten, die beim Ausführen dieses Mustercodes 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 wird 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-Clients im CWF-Format ausgegeben, das auf der C-Struktur tagIA81CONF basiert. Die folgenden Informationen erläutern die Felder und Werte:

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;

Schließen Sie die traditionelle Anwendung. Sie können nun über den Assistenten Mustercodes vorbereiten den Mustercode aus dem Arbeitsbereich entfernen.

Zurück zum Beginn des Mustercodes