Wenn Sie einen SOAP-Knoten mithilfe der WSDL konfigurieren, gibt die WSDL an, ob eine gegebene Operation unidirektional ist oder nicht. Wenn Sie jedoch einen Knoten im Gateway-Modus ohne WSDL konfigurieren, bedeutet das, dass diese WSDL-Informationen nicht verfügbar sind. Daher versuchen als Gateways konfigurierte SOAP-Knoten automatisch, unidirektionale Operationen festzustellen, die auf dem Nachrichteninhalt basieren.
Erkennung einer unidirektionalen Operation des SOAPInput-Knotens
Der SOAPInput-Knoten erkennt unidirektionale Nachrichten auf verschiedene Arten, abhängig von der verwendeten Transportmethode und davon, ob WS-Addressing auf dem Knoten konfiguriert ist oder nicht.
- Wenn der Knoten HTTP-Transport verwendet und für ihn WS-Addressing konfiguriert ist, ist die Operation unidirektional, wenn die eingehende Nachricht die spezielle WSA:None-Adresse für die WSA:ReplyTo- und WSA:FaultTo-Adressen verwendet.
- Verwendet der Knoten die HTTP-Transportmethode und verfügt über kein konfiguriertes WS-Addressing, findet keine automatische Erkennung unidirektionaler Nachrichten statt.
- Wenn der Knoten JMS-Transport verwendet und für ihn WS-Addressing konfiguriert ist, ist die Operation unidirektional, wenn die beiden folgenden Bedingungen 'true' sind:
- Die eingehende Nachricht verwendet die spezielle WSA:None-Adresse (http://www.w3.org/2005/08/addressing/none) für die Adressen WSA:ReplyTo und WSA:FaultTo.
- In der eingehenden Nachricht wurde kein JMS-ReplyTo-Ziel angegeben, und die eingehende Nachricht verwendet die spezielle Adresse WSA:Anonymous (http://www.w3.org/2005/08/addressing/anonymous
oder http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous) für die Adressen WSA:ReplyTo und WSA:FaultTo.
- Wenn der Knoten die JMS-Transportmethode verwendet und WS-Addressing nicht konfiguriert ist, ist die Operation unidirektional, wenn in der eingehenden Nachricht kein JMS-ReplyTo-Ziel angegeben ist.
Das Feld
SOAP.Context.operationType ist auf
GATEWAY gesetzt, wenn die Operation der Art Anforderung-Antwort ist, oder auf
GATEWAY_ONE_WAY, wenn die Operation unidirektional ist. Wenn die Operation unidirektional ist, ist keine Antwort erforderlich oder zulässig. Ist die Operation jedoch nicht unidirektional, wird der Fluss mit der Annahme konfiguriert, dass er eine Antwort sendet. Wenn die Operation unidirektional ist, müssen
Sie deshalb angeben, dass sie unidirektional ist, damit der Fluss Ressourcen freigeben kann und,
wenn HTTP verwendet wird, eine HTTP 202-Bestätigung zurück zum ausstellenden Client senden
kann. Dies erreichen Sie, indem Sie das folgende Feld in der lokalen Umgebung angeben, bevor Sie die Nachricht mit einem
SOAPReply-Knoten verbinden:
SET OutputLocalEnvironment.Destination.SOAP.Reply.Gateway.OneWay = 'true';
Diese Einstellung weist den SOAPReply-Knoten an, das
Message Exchange Pattern zu vervollständigen, falls gewünscht, bevor eine HTTP 202-Bestätigung
gesendet wird, und seine Ressourcen freizugeben.
Eine Möglichkeit zur Verwendung dieser Einstellung wäre in einem Gateway-Fluss wie dem folgenden gegeben:
In diesem Fluss bestimmt der Compute-Knoten, ob die Nachricht unidirektional ist. Wenn die Nachricht unidirektional ist, legt der Compute-Knoten die unidirektionale Einstellung der lokalen Umgebung fest und sendet eine Nachricht an den SOAPReply-Knoten, um das Message Exchange Pattern zu vervollständigen. Handelt es sich bei dem Fluss um einen Gateway-Fluss und die Option für die unidirektionale Umgebung wurde gesetzt, verursachen alle Nachrichten, die vom SOAPReply-Knoten empfangen wurden, dass er den Nachrichteninhalt ignoriert und das Message Exchange Pattern abschließt. Der Fluss kann anschließend durch das andere Terminal des Compute-Knotens fortgesetzt werden.
Es ist kein Fehler, wenn eine Nachricht mit gesetzter unidirektionaler Umgebungsoption an den SOAPReply-Knoten gesendet wird, wenn die Nachricht automatisch als unidirektionale Nachricht bestimmt war.
Erkennung einer unidirektionalen Operation des SOAPRequest-Knotens
Im Gateway-Modus erkennt der
SOAPRequest-Knoten automatisch, ob eine Nachricht nur unidirektional ist, wenn WSA verwendet wird und die Adressen
WSA:ReplyTo und
WSA:FaultTo auf die
spezielle Adresse
WSA:None gesetzt sind.
Um den Knoten manuell anzuweisen, dass die Nachricht unidirektional ist, legen Sie die folgende Option in der lokalen Umgebung fest:
SET OutputLocalEnvironment.Destination.SOAP.Request.Gateway.OneWay = 'true';
Für den SOAPRequest-Knoten bedeutet die Angabe, dass
eine Nachricht unidirektional ist, dass keine Antwort erwartet wird, außer für eine HTTP
202-Bestätigung, wenn der HTTP-Transport verwendet wird. Wird der JMS-Transport verwendet, erlaubt er der Nachricht auch, dass sie unter Steuerung einer bestehenden Transaktion gesendet wird, wenn der Transaktionsmodus auf Ja oder Automatisch gesetzt ist.