Compartilhar via


Contratos de roteamento

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

Contratos de roteamento

Como o Serviço de Roteamento aceita um objeto de mensagem WCF 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 mensagem 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 de mensagem ou ação 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.

Contrato Forma Forma do Canal
ISimplexDatagramRouter SessionMode = SessionMode.Allowed

AsyncPattern = true

IsOneWay = true
IInputChannel –> IOutputChannel
ISimplexSessionRouter SessionMode = SessionMode.Required

AsyncPattern = true

IsOneWay = true
IInputSessionChannel –> IOutputSessionChannel
IRequestReplyRouter SessionMode = SessionMode.Allowed

AsyncPattern = true
IReplyChannel –> IRequestChannel
IDuplexSessionRouter SessionMode=SessionMode.Required

CallbackContract=typeof(ISimplexSession)

AsyncPattern = true

IsOneWay = true

TransactionFlow(TransactionFlowOption.Allowed)
IDuplexSessionChannel –> IDuplexSessionChannel

Consulte também