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:
- Wählen Sie einen beliebigen Header in einem HTTPReplyHeader aus.
- Wenn bislang noch kein Content-Type-Header definiert wurde, erstellen Sie ihn, indem Sie einen beliebigen Wert in der Eigenschaft 'ContentType' auswählen.
- Wählen Sie einen beliebigen Header in einem HTTPResponseHeader aus (ein HTTPResponseHeader wird bei
der Rücklieferung von einem HTTPAnforderungsknoten weitergegeben).
- Wenn bislang noch kein Content-Type-Header definiert wurde, erstellen Sie einen mit dem
Standardwert text/xml; charset=utf-8.
- 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:
- Richten Sie den Header 'Host' entweder auf Basis der Anforderungs-URL oder des Abschnitts
'HTTPRequestHeader' der eingehenden Nachricht ein.
- Wählen Sie einen beliebigen Header in einem HTTPRequestHeader aus.
- Wenn bislang noch kein Content-Type-Header definiert wurde, erstellen Sie ihn, indem Sie einen beliebigen Wert in der Eigenschaft 'ContentType' auswählen.
- Wählen Sie einen Header in einem HTTPInputHeader aus (ein HTTPInputHeader wird automatisch von einem HTTPEmpfangsknoten erstellt).
- Wenn bislang noch kein Content-Type-Header definiert wurde, erstellen Sie einen mit dem
Standardwert text/xml; charset=utf-8.
- Wenn bislang noch kein SOAPAction-Header definiert wurde, erstellen Sie einen mit dem
Standardwert ''.
- 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:
- Starten Sie den Trace mit dem Befehl mqsichangetrace unter
Angabe der folgenden Optionen:
mqsichangetrace Komponente -t -b
Dabei
steht Komponente für den Brokernamen.
- 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.
- Formatieren Sie das Traceprotokoll mit dem Befehl
mqsiformatlog, so dass Sie den Inhalt anzeigen können.