Início > WCF > WCF Routing – Parte 1

WCF Routing – Parte 1

13 de abril de 2011 Deixe um comentário Go to comments

O WCF é a plataforma unificada de serviços da Microsoft, e agore iremos fazer um overview de um recurso interessante do WCF 4.0, trata-se do WCF Routing.  O WCF Routing é um serviço para encaminhar mensagens para outro(s) serviço baseado em algum critério/condição. Imagina o seguinte cenário:

  1.   Em seu projeto/Empresa você possui 2 serviços sendo eles: Serviço1 e  Serviço2, cada um deles esta hospedado em um servidor (Servidor1 =  Serviço1 e Servidor2 = Serviço2).
  2.   Agora imagine os clientes consumindo estes serviços, obrigatoriamente eles deverão conhecer o endereço dos serviços (a não ser que ele use o Discovery Service, mas iremos falar disso em outro tópico), ou seja os clientes teria que ter duas referencias de endpoint, uma para o Servidor1/Serviço1 e outra para Servidor2/Serviço2.
  3.  Apesar de esta abordagem ser a mais comum hoje em dia, principalmente nos ambientes sem governança, ela não é muito flexível para manutenções, pois imaginem que se o serviço2 até então hospedado no Servidor2 mudar para o Servidor3, iríamos necessitar sair alterando o endereço em todos os clientes que consomem este serviço.

O WCF Routing veio justamente para ajudar a simplificar e deixar mais flexível este cenário, pois com o WCF Routing, teríamos um único serviço que irá encaminhar as requisições para os outros serviços (mascara), baseando-se em um critério de filtros de operações (Action definido na operação) que foi requisitada pelo cliente (critério de Routing) e caso o endereço do serviço mude o único ponto de alteração seria o serviço do WCF Routing.

Obs.: O fato do WCF Routing vir nativamente no WCF 4.0 não quer dizer que esta solução não era possível de ser feita nas versões anteriores, na verdade o WCF Routing veio apenas para simplificar o processo que alguns desenvolvedores faziam manualmente. Veja aqui um artigo falando a respeito de como implementar o Router na versão 3.5

 

Quais utilidades ou cenários de uso com o WCF Routing? Dentre as várias utilidades/cenários de uso existentes com o WCF Routing, destaco algumas, são elas:

 Encaminhamento de mensagens:
O WCF Routing recebe a requisição do cliente, esta requisição passa por um critério de filtros que servem para identificar a mensagem e o destinatário que no caso seria nossos client services (Service1 e Service2) .

Backup de Serviço:
O WCF Router também permite ser configurado para enviar mensagens para um serviço de backup, ou seja, caso você configure que o backup do serviço 1 seja o serviço 2 , e ele tente enviar a requisição do client para o serviço 1 e o mesmo não esteja operante, ele irá redirecionar a mensagem para o serviço 2.

Multicast mensagens:
Em cenários onde o cliente envia uma mensagem e você precisa encaminhar esta mensagem para mais de um serviços (serviço 1 e serviço 2 do nosso exemplo), ou seja, disparar a mensagem do cliente para mais de um serviço (multicast).

 

Obs.: O Multicast é suportado em operações One-Way, visto que em outros modelos de operações é necessário que o serviço envie a resposta (exemplo Request-Reply/Callback).

 
Conhecendo o WCF Routing:
O  Routing Service é implementado no System.ServiceModel.Routing.RoutingService, caso esteja desenvolvendo seu projeto de WCF, é necessário adicionar a referencia do System.ServiceModel.Routing.

O RoutingService é a classe responsável pelo roteamento que poderá ser hospedado em qualquer host (pois trata-se de um serviço WCF), ou seja, você pode hospedar o WCF Router dentro de um Windows Service ou mesmo no IIS (se puder ser o IIS 7.0 ou superior com WAS/AppFabric melhor ainda). Isso quer dizer que quando vamos fazer o listening do Host o serviço que subimos para o ServiceHost é o RoutingService, veja abaixo um exemplo de como iniciar o ServiceHost do nosso serviço de Router em um Console Application:
 

static void Main(string[] args)

    ServiceHosthost = new ServiceHost(typeof(RoutingService));
    host.Open();
    Console.WriteLine(“Serviço do Router iniciado..”);
    Console.Read();
    host.Close();
}

  

  A classe RoutingService implementa as intefaces abaixo, é importante conhecer as mesmas pois elas serão nosso contrato (ABC WCF):

ISimplexDatagramRouter: Para trocas de mensagens com o modelo de operação One-Way (unidirecional).
ISimplexSessionRouter: Para trocas de mensagens com o modelo de operação One-Way (unidirecional) com sessão.
IRequestReplyRouter: Para trocas de mensagens com o modelo de operação Resquest-Reply
IDuplexSessionRouter: Para trocas de mensagens com o modelo de operação Duplex (Bidirecional).

Continua..

Categorias:WCF
  1. Robson Bacarin
    14 de abril de 2011 às 8:54

    Bacana hein, manutibilidade++.

  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: