Compartilhar via


Serviço de roteamento

O Serviço de Roteamento é um intermediário SOAP genérico que atua como um roteador de mensagem. A funcionalidade principal 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.

Ele 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 encaminha 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ço
    • Controle de versão do serviço
    • Roteamento prioritário
    • Configuração dinâmica
  • Interligação de protocolos

  • Processamento SOAP

  • Tratamento avançado de erros

  • Endpoints de backup

Embora seja possível criar um serviço intermediário que realize uma ou mais dessas metas, geralmente essa implementação está vinculada a um cenário ou solução específico e não pode ser prontamente aplicada a novos aplicativos.

O Serviço de Roteamento fornece um intermediário SOAP genérico, configurável dinamicamente e plugável compatível com os modelos de Serviço e Canal do WCF e permite que você execute o roteamento baseado em conteúdo de mensagens baseadas em SOAP.

Observação

No momento, o Serviço de Roteamento não dá suporte ao roteamento de serviços REST do WCF. Para rotear chamadas REST, considere o uso System.Web.Routing ou o Roteamento de Solicitação de Aplicativo.

Roteamento baseado em conteúdo

O 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 que você cria. O roteamento baseado em conteúdo fornece a base para agregação de serviço, controle de versão de serviço e roteamento de prioridade.

Para implementar o roteamento baseado em conteúdo, o serviço de roteamento depende de implementações MessageFilter 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 filtro (FilterTableCollection) para construir uma lógica de roteamento complexa. Por exemplo, uma tabela de filtro pode conter cinco filtros de mensagem 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 runtime.

Por meio do agrupamento de filtros de mensagens em tabelas de filtro, a lógica de roteamento pode ser construída que permite lidar com vários cenários de roteamento, como:

  • Agregação de serviço
  • Controle de versão do serviço
  • Roteamento prioritário
  • Configuração dinâmica

Para obter mais informações sobre filtros de mensagens e tabelas de filtro, consulte Introdução ao Roteamento e Filtros de Mensagens.

Agregação de serviço

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 de back-end e, também, para apresentar um ponto de extremidade de aplicativo aos clientes, enquanto coloca seu aplicativo em vários serviços.

Controle de versão do serviço

Ao migrar para uma nova versão da solução, talvez seja necessário manter a versão antiga em paralelo para atender aos clientes existentes. Geralmente, isso requer que os clientes que se conectam à versão mais recente usem um endereço diferente ao se comunicarem com a solução. O Serviço de Roteamento permite que você exponha um ponto de extremidade de serviço que atenda às duas versões da sua solução roteando mensagens para a solução apropriada com base nas informações específicas da versão contidas na mensagem. Para obter um exemplo dessa implementação, consulte Como: Controle de versão do serviço.

Roteamento Prioritário

Ao fornecer um serviço para vários clientes, você pode ter um SLA (contrato de nível de serviço) com alguns parceiros que exige que todos os dados desses parceiros sejam processados separadamente do 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 criado para atender aos requisitos do SLA.

Configuração Dinâmica

Para dar suporte a sistemas críticos, em que as mensagens devem ser processadas sem interrupções de serviço, é vital que você possa modificar a configuração de componentes dentro do sistema em runtime. Para dar suporte a essa necessidade, o Serviço de Roteamento fornece uma implementação IExtension<T> , a RoutingExtensionque permite a atualização dinâmica da configuração do Serviço de Roteamento em runtime.

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 de 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 exigido pelo(s) ponto(s) de extremidade de destino. Dessa 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 vinculações fornecidas pelo sistema que permitem que o serviço interligue 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 requisitos SOAP diferentes. Para dar suporte a esse requisito, o Serviço de Roteamento fornece um SoapProcessingBehavior que cria automaticamente um novo MessageVersion que atende aos requisitos do ponto de extremidade de destino antes que a mensagem seja roteada para ele. Esse comportamento também cria uma nova MessageVersion para qualquer mensagem de resposta antes de devolvê-la ao aplicativo cliente solicitante, para garantir que a MessageVersion da resposta corresponda à da solicitação original.

Para obter mais informações sobre o processamento SOAP, consulte Introdução ao Roteamento.

Tratamento de erros

Em um sistema composto por serviços distribuídos que dependem de comunicações de rede, é importante garantir que as comunicações em seu sistema sejam resistentes a falhas transitórias de rede. 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, podem resultar em uma interrupção de serviço.

Se o Serviço de Roteamento encontrar um CommunicationException ao tentar enviar uma mensagem, o tratamento de erros ocorrerá. Essas exceções normalmente indicam que um problema foi encontrado ao tentar se comunicar com o ponto de extremidade do cliente definido, como uma EndpointNotFoundException, ServerTooBusyException ou CommunicationObjectFaultedException O código de tratamento de erros também capturará e tentará repetir o envio 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.

Endpoints de Backup

Além dos pontos de extremidade de cliente de destino associados a cada definição de filtro na tabela de filtro, você também pode criar uma lista de pontos de extremidade de backup para os quais a mensagem será roteada em caso de falha de transmissão. Se ocorrer um erro e uma lista de backup for definida para a entrada de 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, retornará um erro não relacionado à transmissão ou todos os pontos de extremidade na lista de backup retornaram um erro de transmissão.

Para obter mais informações sobre pontos de extremidade de backup, consulte Introdução ao roteamento e Filtros de mensagem.

Transmissão ao vivo

O serviço de roteamento poderá transmitir mensagens com êxito se você definir a associação para dar suporte ao streaming. No entanto, há algumas condições nas quais as mensagens podem precisar ser armazenadas em buffer:

  • Multicast (buffer para criar cópias de mensagens adicionais).
  • Failover (buffer para o caso de a mensagem precisar ser enviada para um backup).
  • System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly é falso (o buffer apresenta o MessageFilterTable com um MessageBuffer, permitindo que os filtros inspecionem o corpo).
  • Configuração dinâmica.

Consulte também