Serviço de roteamento
O Serviço de Roteamento é um intermediário SOAP genérico que atua como um roteador de mensagens. A principal funcionalidade do Serviço de Roteamento é a capacidade de rotear mensagens com base no conteúdo da mensagem, o que permite que uma mensagem seja encaminhada para um ponto de extremidade do cliente com base em um valor dentro da própria mensagem, no cabeçalho ou no corpo da mensagem.
O RoutingService é implementado como um serviço WCF (Windows Communication Foundation) no System.ServiceModel.Routing namespace. O Serviço de Roteamento expõe um ou mais pontos de extremidade de serviço que recebem mensagens e, em seguida, roteia cada mensagem para um ou mais pontos de extremidade do cliente com base no conteúdo da mensagem. O serviço fornece os seguintes recursos:
Roteamento baseado em conteúdo
Agregação de serviços
Controle de versão do serviço
Encaminhamento prioritário
Configuração dinâmica
Protocolo de transição
Processamento SOAP
Tratamento avançado de erros
Pontos de extremidade de backup
Embora seja possível criar um serviço intermediário que atinja um ou mais desses objetivos, muitas vezes essa implementação está vinculada a um cenário ou solução específica e não pode ser prontamente aplicada a novos aplicativos.
O Serviço de Roteamento fornece um intermediário SOAP genérico, dinamicamente configurável e conectável que é compatível com os modelos de Canal e Serviço WCF e permite que você execute o roteamento baseado em conteúdo de mensagens baseadas em SOAP.
Nota
Atualmente, o Serviço de Roteamento não oferece suporte ao roteamento de serviços WCF REST. Para rotear chamadas REST, considere usar o Roteamento de System.Web.Routing Solicitação de Aplicativo.
Roteamento baseado em conteúdo
Roteamento baseado em conteúdo é a capacidade de rotear uma mensagem com base em um ou mais valores contidos na mensagem. O Serviço de Roteamento inspeciona cada mensagem e a encaminha para o ponto de extremidade de destino com base no conteúdo da mensagem e na lógica de roteamento criada. O roteamento baseado em conteúdo fornece a base para agregação de serviços, controle de versão de serviços e roteamento de prioridade.
Para implementar o roteamento baseado em conteúdo, o Serviço de Roteamento depende de MessageFilter implementações que são usadas para corresponder a valores específicos dentro das mensagens a serem roteadas. Se um MessageFilter corresponder a uma mensagem, a mensagem será roteada para o ponto de extremidade de destino associado ao MessageFilter. Os filtros de mensagem são agrupados em tabelas de filtros (FilterTableCollection) para construir uma lógica de roteamento complexa. Por exemplo, uma tabela de filtros pode conter cinco filtros de mensagens mutuamente exclusivos que fazem com que as mensagens sejam roteadas para apenas um dos cinco pontos de extremidade de destino.
O Serviço de Roteamento permite configurar a lógica usada para executar o roteamento baseado em conteúdo, bem como atualizar dinamicamente a lógica de roteamento em tempo de execução.
Através do agrupamento de filtros de mensagens em tabelas de filtros, é possível construir uma lógica de roteamento que permite lidar com vários cenários de roteamento, como:
Agregação de serviços
Controle de versão do serviço
Encaminhamento prioritário
Configuração dinâmica
Para obter mais informações sobre filtros de mensagens e tabelas de filtros, consulte Introdução ao roteamento e filtros de mensagens.
Agregação de Serviços
Usando o roteamento baseado em conteúdo, você pode expor um ponto de extremidade que recebe mensagens de aplicativos cliente externos e, em seguida, roteia cada mensagem para o ponto de extremidade interno apropriado com base em um valor dentro da mensagem. Isso é útil para oferecer um ponto de extremidade específico para uma variedade de aplicativos back-end e também para apresentar um ponto de extremidade de aplicativo aos clientes enquanto fatora seu aplicativo em uma variedade de serviços.
Controle de versão de serviço
Ao migrar para uma nova versão da sua solução, talvez seja necessário manter a versão antiga em paralelo para atender aos clientes existentes. Muitas vezes, isso requer que os clientes que se conectam à versão mais recente devem usar um endereço diferente ao se comunicar com a solução. O Serviço de Roteamento permite que você exponha um ponto de extremidade de serviço que atende a ambas as versões da sua solução, roteando mensagens para a solução apropriada com base em informações específicas da versão contidas na mensagem. Para obter um exemplo dessa implementação, consulte Como: Controle de versão de serviço.
Roteamento prioritário
Ao fornecer um serviço para vários clientes, você pode ter um contrato de nível de serviço (SLA) com alguns parceiros que exige que todos os dados desses parceiros sejam processados separadamente dos de outros clientes. Usando um filtro que procura informações específicas do cliente contidas na mensagem, você pode facilmente rotear mensagens de parceiros específicos para um ponto de extremidade que foi criado para atender aos requisitos de SLA.
Configuração dinâmica
Para suportar sistemas de missão crítica, onde as mensagens devem ser processadas sem interrupções de serviço, é vital que você seja capaz de modificar a configuração de componentes dentro do sistema em tempo de execução. Para dar suporte a essa necessidade, o Serviço de Roteamento fornece uma IExtension<T> implementação, o RoutingExtension, que permite a atualização dinâmica da configuração do Serviço de Roteamento em tempo de execução.
Para obter mais informações sobre a configuração dinâmica do serviço de roteamento, consulte Introdução ao roteamento.
Ponte de protocolo
Um dos desafios em cenários intermediários é que os pontos de extremidade internos podem ter requisitos de transporte ou versão SOAP diferentes do ponto de extremidade no qual as mensagens são recebidas. Para dar suporte a esse cenário, o Serviço de Roteamento pode fazer a ponte de protocolos, incluindo o processamento da mensagem SOAP para o MessageVersion requerido pelo(s) ponto(s) de extremidade(s) de destino. Desta forma, um protocolo pode ser usado para comunicação interna, enquanto outro pode ser usado para comunicação externa.
Para dar suporte ao roteamento de mensagens entre pontos de extremidade com transportes diferentes, o Serviço de Roteamento usa associações fornecidas pelo sistema que permitem que o serviço faça a ponte entre protocolos diferentes. Isso ocorre automaticamente quando o ponto de extremidade de serviço exposto pelo Serviço de Roteamento usa um protocolo diferente dos pontos de extremidade do cliente para os quais as mensagens são roteadas.
Processamento SOAP
Um requisito de roteamento comum é a capacidade de rotear mensagens entre pontos de extremidade com diferentes requisitos SOAP. Para dar suporte a esse requisito, o Serviço de Roteamento fornece um SoapProcessingBehavior que cria automaticamente uma nova MessageVersion que atende aos requisitos do ponto de extremidade de destino antes que a mensagem seja roteada para ele. Esse comportamento também cria um novo MessageVersion para qualquer mensagem de resposta antes de retorná-la ao aplicativo cliente solicitante, para garantir que o MessageVersion da resposta corresponda ao da solicitação original.
Para obter mais informações sobre o processamento SOAP, consulte Introdução ao roteamento.
Processamento de Erros
Em um sistema composto por serviços distribuídos que dependem de comunicações de rede, é importante garantir que as comunicações dentro do seu sistema sejam resistentes a falhas de rede transitórias. O Serviço de Roteamento implementa o tratamento de erros que permite lidar com muitos cenários de falha de comunicação que, de outra forma, poderiam resultar em uma interrupção do serviço.
Se o Serviço de Roteamento encontrar um CommunicationException ao tentar enviar uma mensagem, o tratamento de erros ocorrerá. Essas exceções geralmente indicam que um problema foi encontrado ao tentar se comunicar com o ponto de extremidade do cliente definido, como um EndpointNotFoundException, ServerTooBusyExceptionou CommunicationObjectFaultedException. O código de tratamento de erros também detetará e tentará enviar novamente quando ocorrer um TimeoutException , que é outra exceção comum que não é derivada de CommunicationException.
Para obter mais informações sobre o tratamento de erros, consulte Introdução ao roteamento.
Pontos de extremidade de backup
Além dos pontos de extremidade do cliente de destino associados a cada definição de filtro na tabela de filtros, você também pode criar uma lista de pontos de extremidade de backup para os quais a mensagem será roteada no caso de uma falha de transmissão. Se ocorrer um erro e uma lista de backup for definida para a entrada do filtro, o Serviço de Roteamento tentará enviar a mensagem para o primeiro ponto de extremidade definido na lista. Se essa tentativa de transmissão falhar, o serviço tentará o próximo ponto de extremidade e continuará esse processo até que a tentativa de transmissão seja bem-sucedida, retorne um erro não relacionado à transmissão ou todos os pontos de extremidade na lista de backup tenham retornado um erro de transmissão.
Para obter mais informações sobre pontos de extremidade de backup, consulte Introdução ao roteamento e filtros de mensagens.
Transmissão
O serviço de roteamento pode transmitir mensagens com êxito se você definir a associação para dar suporte ao streaming. No entanto, há algumas condições sob as quais as mensagens podem precisar ser armazenadas em buffer:
Multicast (buffer para criar cópias de mensagens adicionais)
Failover (buffer no caso de a mensagem precisar ser enviada para um backup)
System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly é false (buffer para apresentar o MessageFilterTable com um MessageBuffer para que os filtros possam inspecionar o corpo)
Configuração dinâmica