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 roteie 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 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, por exemplo, quando o dispatcher converte um canal dúplex em um canal de solicitação-resposta ou remove o suporte de sessão de um canal quando 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 mensagens, o Serviço de Roteamento fornece contratos no namespace System.ServiceModel.Routing, 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 namespace System.ServiceModel.Routing 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

Confira também