Mit HTTP-Nachrichtenflüssen arbeiten

Lesen Sie die folgenden Informationen, wenn Sie HTTP-Nachrichtenflüsse für die Interaktion mit Web-Services verwenden. Zum besseren Verständnis wird empfohlen, diesen Abschnitt in Verbindung mit dem folgenden Abschnitt (Web-Service-Szenarios) zu lesen.

HTTPS
Hilfe bei der Verwendung von HTTPS finden Sie unter Implementierung der SSL-Authentifizierung.
Festlegen des HTTP-Statuscodes für eine Antwort
Der Standardwert für den HTTP-Statuscode lautet 200, was Erfolg bedeutet. Wenn ein anderer Statuscode zurückgegeben werden soll, führen Sie eine der folgenden Aktionen aus:
  • Legen Sie den gewünschten Statuscode im Feld 'Destination.HTTP.ReplyStatusCode' in der Baumstruktur 'LocalEnvironment' (Korrelationsname 'OutputLocalEnvironment') fest. Dieses Feld überschreibt einen im Header 'HTTPResponseHeader' festgelegten Statuscode. Dies ist die bevorzugte Aktion, weil sie die größte Flexibilität bietet.
  • Legen Sie den gewünschten Statuscode im Feld 'X-Original-HTTP-Status-Code' im Header 'HTTPReplyHeader' fest.
  • Legen Sie den gewünschten Statuscode im Feld 'X-Original-HTTP-Status-Code' im Header 'HTTPResponseHeader' fest. Diese Option ist normalerweise dann nützlich, wenn Sie einen HTTPAnforderungsknoten vor dem HTTPAntwortknoten im Nachrichtenfluss einfügen, denn dann wird der Header 'HTTPResponseHeader' automatisch erstellt. In diesem Szenario wurde der Header 'HTTPResponseHeader' in der logischen Baumstruktur, welche die HTTP-Header in der Antwort von einem anderen Web-Service wiedergibt, erstellt. Wenn Sie die Eigenschaft HTTP-Standard-Header auf Basis der Antwort generieren im HTTPAntwortknoten ausgewählt haben, werden Werte für den Antwortheader als Standardwerte festgelegt, wenn die Antwortnachricht erstellt wird.
'LocalEnvironment.Destination.HTTP.RequestIdentifier' verwenden
Wenn der HTTPEmpfangsknoten eine Eingabeanforderungsnachricht empfängt, setzt er das LocalEnvironment-Feld 'Destination.HTTP.RequestIdentifier' auf einen eindeutigen Wert, der den Web-Service-Client, von dem die Anforderung gesendet wurde, identifiziert. Sie können auf diesen Wert verweisen und ihn bei Bedarf in einem anderen Verzeichnis speichern.

Wenn Sie beispielsweise ein Nachrichtenflusspaar entwerfen, das mit einer bestehenden WebSphere MQ-Anwendung interagiert (wie in Broker ruft bestehenden Web-Service auf beschrieben), können Sie den Bezeichnerwert im Anforderungsnachrichtenfluss speichern und ihn im Antwortnachrichtenfluss wiederherstellen, um sicherzustellen, dass die Antwort an den richtigen Client gesendet wird. In diesem Fall dürfen Sie die Daten nicht ändern und müssen die Daten als BLOB erhalten.

Der HTTPAntwortknoten extrahiert den Bezeichnerwert aus der Baumstruktur 'LocalEnvironment' und erstellt die Antwort, so dass sie an den bestimmten Client gesendet wird. Wenn Sie jedoch einen HTTPAntwortknoten in einem Nachrichtenfluss einsetzen, der keinen HTTPEmpfangsknoten enthält, und dieses Feld gelöscht oder falsch festgelegt wurde, wird die Nachricht BIP3143S ausgegeben.

Wenn Sie einen Nachrichtenfluss entwerfen, der sowohl einen HTTPEmpfangs- als auch HTTPAntwortknoten enthält, wird der Bezeichnerwert in LocalEnvironment vom HTTPEmpfangsknoten festgelegt, vom HTTPAntwortknoten jedoch nicht verwendet. Falls Ihr Nachrichtenfluss beide Knoten und einen Rechenknoten im selben Datenfluss enthält, müssen Sie deshalb die Baumstruktur 'LocalEnvironment' nicht einfügen, wenn Sie angeben, welche Komponenten der Nachrichtenbaumstruktur vom Rechenknoten aus der Eingabe- in die Ausgabenachricht kopiert werden (Eigenschaft Rechenmodus).

URL des HTTPAnforderungsknotens dynamisch festlegen
Sie können die Eigenschaft Default Web service URL (URL für Standard-Web-Service) im HTTPAnforderungsknoten angeben, um die Ziel-URL für eine Web-Service-Anforderung festzulegen. Sie können vor dem HTTPAnforderungsknoten im Nachrichtenfluss einen Rechenknoten konfigurieren, um den in der Eigenschaft angegebenen Wert zu überschreiben. Schreiben Sie einen ESQL-Code, der eine URL-Zeichenfolge in 'LocalEnvironment.Destination.HTTP.RequestURL' speichert. Der HTTPAnforderungsknoten ruft die URL-Zeichenfolge ab und verwendet sie statt des Knoteneigenschaftenwertes.

Sie können den Anforderungs-URL zwar auch im Spezialheader 'X-Original-HTTP-URL' im Abschnitt 'HTTPRequestHeader' der Anforderungsnachricht in einem Rechenknoten festlegen (wodurch alle anderen Einstellungen überschrieben werden). Den Inhalt von LocalEnvironment zu diesem Zweck zu verwenden, bietet jedoch eine größere Flexibilität.

Eigenschaft HTTP-Standard-Header auf Basis der Antwort generieren für den HTTPAntwortknoten festlegen
Wenn Sie HTTP-Standard-Header auf Basis der Antwort generieren in den Eigenschaften des HTTPAntwortknotens auswählen, fügt der Knoten eine Mindestanzahl von Headern in die Antwort, die an den Web-Service-Client gesendet wird, ein.
Wenn Sie Header explizit festlegen möchten, müssen Sie sie in einem HTTPReplyHeader erstellen. Beispiel: Ein Rechenknoten gibt eine Nachricht in der XMLNS-Domäne weiter und ändert den Inhaltstyp (Content-Type) wie folgt:
CALL CopyMessageHeaders();
SET OutputRoot.HTTPReplyHeader."Content-Type" = 'text/xml';
SET OutputRoot.XMLNS = InputRoot.XMLNS;

Legen Sie den Inhaltstyp nicht über die Eigenschaft 'ContentType' fest, es sei denn, Sie arbeiten in der MIME-Domäne. Die Eigenschaft 'ContentType' dient speziell zum Einrichten des Inhaltstypwertes in MIME.

Die ganze Reihe der in dieser Anforderung verwendeten HTTP-Header wird erstellt, indem die Header mit dem in den folgenden Schritten definierten Algorithmus ausgewählt werden:
  1. Wählen Sie einen beliebigen Header in einem HTTPReplyHeader aus.
  2. Wenn bislang noch kein Content-Type-Header definiert wurde, erstellen Sie ihn, indem Sie einen beliebigen Wert in der Eigenschaft 'ContentType' auswählen.
  3. Wählen Sie einen beliebigen Header in einem HTTPResponseHeader aus (ein HTTPResponseHeader wird bei der Rücklieferung von einem HTTPAnforderungsknoten weitergegeben).
  4. Wenn bislang noch kein Content-Type-Header definiert wurde, erstellen Sie einen mit dem Standardwert text/xml; charset=utf-8.
  5. Erstellen oder überschreiben Sie den Content-Length-Header.
Achtung: Der HTTPAntwortknoten schreibt den Header 'Content-Length' (Inhaltslänge) immer neu, auch wenn HTTP-Standard-Header auf Basis von Eingabe oder Antwort generieren nicht ausgewählt ist. Dadurch wird die Richtigkeit des Inhalts sichergestellt.

Wenn in der vom HTTPAntwortknoten empfangenen Nachricht ein Abschnitt 'HTTPReplyHeader' enthalten war und eine Verbindung mit dem Ausgabeterminal des HTTPAntwortknotens besteht, wird der Abschnitt 'HTTPReplyHeader' mit allen geänderten oder hinzugefügten Werten aktualisiert.

Eigenschaft HTTP-Standard-Header auf Basis der Eingabe generieren für den HTTPAnforderungsknoten festlegen
Wenn Sie HTTP-Standard-Header auf Basis der Eingabe generieren in den Eigenschaften des HTTPAnforderungsknotens auswählen, fügt der Knoten eine Mindestanzahl von Headern in die Anforderung, die an den Server gesendet wird, ein.
Um Header explizit festzulegen, müssen Sie sie in einem HTTPRequestHeader erstellen. Beispiel: Ein Rechenknoten, der eine Nachricht in der XMLNS-Domäne weitergibt, kann den Inhaltstyp (Content-Type) wie folgt ändern:
CALL CopyMessageHeaders();
SET OutputRoot.HTTPRequestHeader."Content-Type" = 'text/xml';
SET OutputRoot.XMLNS = InputRoot.XMLNS;
Legen Sie den Inhaltstyp nicht über die Eigenschaft 'ContentType' fest, es sei denn, Sie arbeiten in der MIME-Domäne. Die Eigenschaft 'ContentType' dient speziell zum Einrichten des Inhaltstypwertes in MIME.
Die ganze Reihe der in dieser Anforderung verwendeten HTTP-Header wird erstellt, indem die Header mit dem in den folgenden Schritten definierten Algorithmus ausgewählt werden:
  1. Richten Sie den Header 'Host' entweder auf Basis der Anforderungs-URL oder des Abschnitts 'HTTPRequestHeader' der eingehenden Nachricht ein.
  2. Wählen Sie einen beliebigen Header in einem HTTPRequestHeader aus.
  3. Wenn bislang noch kein Content-Type-Header definiert wurde, erstellen Sie ihn, indem Sie einen beliebigen Wert in der Eigenschaft 'ContentType' auswählen.
  4. Wählen Sie einen Header in einem HTTPInputHeader aus (ein HTTPInputHeader wird automatisch von einem HTTPEmpfangsknoten erstellt).
  5. Wenn bislang noch kein Content-Type-Header definiert wurde, erstellen Sie einen mit dem Standardwert text/xml; charset=utf-8.
  6. Wenn bislang noch kein SOAPAction-Header definiert wurde, erstellen Sie einen mit dem Standardwert ''.
  7. Erstellen oder überschreiben Sie den Content-Length-Header.
Achtung: Der HTTPAnforderungsknoten schreibt den Header 'Content-Length' (Inhaltslänge) immer neu, auch wenn HTTP-Standard-Header auf Basis von Eingabe oder Anforderung generieren nicht aktiviert ist. Dadurch wird die Richtigkeit des Inhalts sichergestellt.

Wenn die empfangene Nachricht den Header 'HTTPRequestHeader' enthält, wird der Header 'HTTPRequestHeader' mit allen geänderten oder hinzugefügten Werten aktualisiert.

Trace für HTTP-Empfangsprogramm bei Problemen mit HTTP erfassen
Wenn Sie Probleme mit HTTP haben, können Sie für das HTTP-Empfangsprogramm einen Trace durchführen:
  1. Starten Sie den Trace mit dem Befehl mqsichangetrace unter Angabe der folgenden Optionen:
    mqsichangetrace Komponente -t -b
    Dabei steht Komponente für den Brokernamen.
  2. Rufen Sie das Traceprotokoll für das HTTP-Empfangsprogramm ab. Verwenden Sie dazu den Befehl mqsireadlog mit dem Qualifikationsmerkmal für das HTTP-Empfangsprogramm für den Parameter -b.
  3. Formatieren Sie das Traceprotokoll mit dem Befehl mqsiformatlog, so dass Sie den Inhalt anzeigen können.
Zugehörige Konzepte
WebSphere MQ Web Services Transport
WSDL generieren
Zugehörige Tasks
Nachrichtenflüsse erstellen
Implementieren
Ergebnisse der Implementierung überprüfen
Zugehörige Verweise
HTTPInput-Knoten
HTTPReply-Knoten
HTTPRequest-Knoten
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Letzte Aktualisierung : 2009-02-17 15:28:24

ac20450_