WSDL を使用して SOAP ノードを構成する際、WSDL は、特定のノード操作が片方向かどうかを指定します。 しかし、WSDL を使用せずにゲートウェイ・モードでノードを構成する場合は、この WSDL 情報を利用できません。 そのため、ゲートウェイとして構成される SOAP ノードは、メッセージの内容に基づいて片方向操作の検出を自動的に試行します。
SOAPInput ノードにおける片方向操作の検出
SOAPInput ノードは、使用されるトランスポートや、WS-Addressing がノードで構成されるかどうかなどに応じて、さまざまな方法で片方向メッセージを検出します。
- ノードで HTTP トランスポートが使用され、WS-Addressing が構成されており、インバウンド・メッセージで WSA:ReplyTo および WSA:FaultTo アドレスに対して特別な WSA:None アドレスが使用される場合、
操作は片方向であると判別されます。
- ノードで HTTP トランスポートが使用され、WS-Addressing が構成されていない場合、片方向メッセージの自動検出は行われません。
- ノードで JMS トランスポートが使用され、WS-Addressing が構成されており、以下のいずれかの条件が当てはまる場合、操作は片方向であると判別されます。
- インバウンド・メッセージで WSA:ReplyTo および WSA:FaultTo アドレスに対して特別な WSA:None アドレス (http://www.w3.org/2005/08/addressing/none) が使用される。
- インバウンド・メッセージで JMS ReplyTo の宛先が指定されておらず、インバウンド・メッセージで WSA:ReplyTo および WSA:FaultTo アドレスに対して特別な WSA:Anonymous アドレス (http://www.w3.org/2005/08/addressing/anonymous または http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous) が使用される。
- ノードで JMS トランスポートが使用され、WS-Addressing が構成されておらず、インバウンド・メッセージで JMS ReplyTo の宛先が指定されていない場合、操作は片方向であると判別されます。
ゲートウェイ・モードでは、
SOAP.Context.operationType フィールドは、操作が要求-応答であると判別される場合には
GATEWAY に設定され、操作が片方向であると判別される場合には
GATEWAY_ONE_WAY に設定されます。 操作が片方向であると判別される場合、応答は不要であるか、許可されません。 しかし、操作が片方向であると判別されない場合、フローは、応答を送信するという前提で構成されます。 したがって、操作が片方向の場合は、操作を片方向として指定する必要があります。そうすることで、フローにおいてリソースが解放されるようにし、HTTP が使用されている場合には、HTTP 202 確認応答が元のクライアントに送り戻されるようにします。 この指定は、メッセージを
SOAPReply ノードに連結する前にローカル環境で以下のフィールドを設定することによって行います。
SET OutputLocalEnvironment.Destination.SOAP.Reply.Gateway.OneWay = 'true';
この設定により、SOAPReply ノードに対して、(必要な場合に) HTTP 202 確認応答を送信する前に、またそのリソースを解放する前に、Message Exchange Pattern を完了するように指示されます。
この設定を使用するための 1 つのアプローチが、以下のようなゲートウェイ・フローにあります。
このフローでは、Compute ノードによってメッセージが片方向かどうかが判別されます。 メッセージが片方向である場合、Compute ノードでローカル環境片方向が設定され、メッセージを SOAPReply ノードに送信し、Message Exchange Pattern を完了します。 フローがゲートウェイ・フローであり、片方向ローカル環境オプションが設定される場合、
SOAPReply ノードで受信されるメッセージがあれば、それによって、メッセージの内容が無視され、Message Exchange Pattern が完了されます。 その後、フローは Compute ノードの別のターミナル経由で続行できます。
メッセージが片方向メッセージとして自動的に判別されている場合に、片方向ローカル環境オプションを設定した SOAPReply ノードにメッセージを送信することは、エラーではありません。
SOAPRequest ノードにおける片方向操作の検出
ゲートウェイ・モードでは、WSA が使用され、
WSA:ReplyTo および
WSA:FaultTo アドレスが特別な
WSA:None アドレスに設定される場合のみ、メッセージが片方向かどうかが
SOAPRequest ノードで自動的に検出されます。
メッセージが片方向であることを手動でノードに指示するには、ローカル環境で以下のオプションを設定します。
SET OutputLocalEnvironment.Destination.SOAP.Request.Gateway.OneWay = 'true';
SOAPRequest ノードでは、メッセージを片方向として指定することはノードにとって、応答が期待されないことを意味します。ただし、HTTP トランスポートが使用される場合の HTTP 202 確認応答は例外です。 JMS トランスポートが使用され、「トランザクション・モード」が「はい」または「自動」に設定される場合には、既存のトランザクションの制御下でメッセージを送信できるようにもなります。