Ao configurar um nó SOAP usando WSDL, o WSDL especifica se uma determinada operação do nó é unidirecional ou não. Entretanto, a configuração de um nó no modo de gateway sem WSDL significa que as informações deste WSDL não estão disponíveis. Assim, os nós SOAP configurados como Gateways tentam detectar automaticamente operações unidirecionais baseadas no conteúdo da mensagem.
Detecção da Operação Unidirecional do Nó SOAPInput
O nó SOAPInput detecta mensagens unidirecionais de maneiras diferentes dependendo do transporte usado e de o WS-Addressing estar configurado ou não no nó.
- Se o nó usar transporte HTTP e tiver o WS-Addressing configurado,
a operação será determinada como unidirecional se a mensagem de entrada usar o endereço WSA:None especial para os endereços WSA:ReplyTo e WSA:FaultTo.
- Se o nó usar o transporte HTTP e não tiver o WS-Addressing
configurado, não ocorrerá nenhuma detecção automática de mensagens unidirecionais.
- Se o nó usar transporte JMS e tiver o WS-Addressing configurado,
a operação será determinada como unidirecional se alguma das seguintes condições for verdadeira:
- A mensagem de entrada usa o WSA:None especial (http://www.w3.org/2005/08/addressing/none)
para os endereços WSA:ReplyTo e WSA:FaultTo.
- Não há nenhum destino JMS ReplyTo especificado na mensagem de entrada, e a mensagem de entrada usa o endereço especial WSA:Anonymous (http://www.w3.org/2005/08/addressing/anonymous
ou http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous)
para os endereços WSA:ReplyTo eWSA:FaultTo.
- Se o nó usar transporte JMS e não tiver o WS-Addressing
configurado, a operação será determinada como unidirecional se não houver nenhum destino JMS ReplyTo especificado na mensagem de entrada.
No modo de gateway, o campo
SOAP.Context.operationType é configurado como
GATEWAY se a operação for determinada como solicitação-resposta ou
GATEWAY_ONE_WAY se a Operação for determinada como unidirecional. Se a operação for determinada como unidirecional, nenhuma resposta será necessária ou permitida. Entretanto, se a Operação não for determinada como unidirecional, o fluxo será configurado com a suposição de que o fluxo envia uma resposta. Assim,
se a Operação for unidirecional, você deverá especificar que a Operação é
unidirecional para permitir que o fluxo libere recursos e, se estiver sendo usado
HTTP, envie um reconhecimento HTTP 202 de volta para o cliente de origem. Faça isso configurando o seguinte campo no ambiente local antes de ligar a mensagem a um nó
SOAPReply:
SET OutputLocalEnvironment.Destination.SOAP.Reply.Gateway.OneWay = 'true';
Esta
configuração instrui o nó SOAPReply a concluir
o Padrão de Troca de Mensagens antes de enviar um reconhecimento HTTP 202, se necessário,
e liberar seus recursos.
Uma abordagem para utilizar esta configuração seria em um fluxo de gateway como este:
Neste fluxo, o nó Compute determina se a mensagem é unidirecional. Se a mensagem for unidirecional, o nó Compute definirá a configuração unidirecional do ambiente local e enviará uma mensagem para o nó SOAPReply para concluir o Padrão de Troca de Mensagens. Se o fluxo for um fluxo de gateway e a opção de ambiente local unidirecional for configurada, qualquer mensagem recebida pelo nó SOAPReply fará com que ele ignore o conteúdo da mensagem e conclua o Padrão de Troca de Mensagens. O fluxo poderá, em seguida, continuar através de outro terminal do nó Compute.
Não é um erro enviar uma mensagem para o nó SOAPReply com a opção de ambiente local unidirecional configurada se a mensagem tiver sido automaticamente determinada como unidirecional.
Detecção da Operação Unidirecional do Nó SOAPRequest
No modo de gateway, o nó
SOAPRequest detecta automaticamente
se uma mensagem é unidirecional somente se o WSA for usado e os endereços
WSA:ReplyTo e
WSA:FaultTo forem configurados como o endereço especial
WSA:None.
Para instruir o nó manualmente de que a mensagem é unidirecional, configure a seguinte opção no ambiente local:
SET OutputLocalEnvironment.Destination.SOAP.Request.Gateway.OneWay = 'true';
Para
o nó SOAPRequest, especificar que uma
mensagem é unidirecional indica para o nó que uma resposta não é esperada, exceto um
reconhecimento HTTP 202 se o transporte HTTP for usado. Se o transporte JMS for usado, ele também permitirá que a mensagem seja enviada sob o controle de qualquer transação existente, se o Modo da transação for para Sim ouAutomático.