Partilhar via


Contratos de roteamento

Os contratos de roteamento definem os padrões de mensagem que o Serviço de Roteamento pode processar. Cada contrato é digitado e permite que o serviço receba uma mensagem sem conhecimento do esquema ou ação da mensagem. Isso permite que o Serviço de Roteamento roteie mensagens genericamente sem configuração adicional para as especificidades das mensagens subjacentes que estão sendo roteadas.

Contratos de roteamento

Como o Serviço de Roteamento aceita um objeto WCF Message genérico, a consideração mais importante ao selecionar um contrato é a forma do canal que será usado ao se comunicar com os clientes e serviços. Ao processar mensagens, o Serviço de Roteamento usa bombas de mensagens simétricas, portanto, geralmente, a forma do contrato de entrada deve corresponder à forma do contrato de saída. No entanto, há casos em que o dispatcher do Modelo de Serviço pode modificar as formas, como quando o dispatcher converte um canal duplex em um canal de solicitação-resposta ou remove o suporte de sessão de um canal quando ele não é necessário e não está sendo usado (ou seja, quando SessionMode.Allowed, convertendo um IInputSessionChannel em um IInputChannel).

Para dar suporte a essas bombas de mensagem, o Serviço de Roteamento fornece contratos no System.ServiceModel.Routing namespace, que devem ser usados ao definir os pontos de extremidade de serviço usados pelo Serviço de Roteamento. Esses contratos são sem tipo, o que permite o recebimento de qualquer tipo ou ação de mensagem e permite que o Serviço de Roteamento manipule mensagens sem conhecimento do esquema de mensagem específico. Para obter mais informações sobre os contratos usados pelo Serviço de Roteamento, consulte Contratos de roteamento.

Os contratos fornecidos pelo Serviço de Roteamento estão localizados no System.ServiceModel.Routing namespace e são descritos na tabela a seguir.

Contract Forma Forma do canal
ISimplexDatagramRouter SessionMode = SessionMode.Allowed

AsyncPattern = verdadeiro

IsOneWay = verdadeiro
IInputChannel -> IOutputChannel
ISimplexSessionRouter SessionMode = SessionMode.Required

AsyncPattern = verdadeiro

IsOneWay = verdadeiro
IInputSessionChannel -> IOutputSessionChannel
IRequestReplyRouter SessionMode = SessionMode.Allowed

AsyncPattern = verdadeiro
IReplyChannel -> IRequestChannel
IDuplexSessionRouter SessionMode=SessionMode.Required

CallbackContract=tipode(ISimplexSession)

AsyncPattern = verdadeiro

IsOneWay = verdadeiro

TransactionFlow(TransactionFlowOption.Allowed)
IDuplexSessionChannel -> IDuplexSessionChannel

Consulte também