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 |