O ASP.NET SignalR é um framework de comunicação em tempo real que pode ser utilizado para diversas funcionalidades, inclusive para integração de comunicação entre sistemas de diferentes plataformas.
Caso não conheça o ASP.NET SignalR aprenda em detalhes neste artigo e nesta palestra.
O ASP.NET SignalR vem sendo amplamente utilizado em diversos cenários de comunicação em tempo real. Muitas vezes a própria solução Web implementa os Hubs e gerencia o recebimento e distribuição de mensagens.
Existem outros cenários em que é necessário desacoplar o lado server do SignalR da aplicação Web. Muitas vezes a informação a ser distribuída pode vir de outros serviços, outras plataformas e etc. É possível utilizar SignalR nesses casos? Sim, é possível!
O SignalR é implementado seguindo a especificação do OWIN e pode trabalhar em uma aplicação Web ou no modo Self-Host em um Windows Service ou aplicação console.
Proponho um cenário hipotético: Existem N broadcasts sendo distribuídos de diversas aplicações independentes da Microsoft e é necessário que a comunicação seja transmitida em tempo real para outras plataformas (Web, Desktop, Mobile). É necessário utilizar uma solução única para atender esta demanda e com baixo esforço de desenvolvimento.
Este cenário é muito similar ao da imagem utilizada no início do artigo e segue o fluxo a seguir:
- O Windows Service implementa uma forma de receber a comunicação vinda das demais aplicações.
- Os Hubs do SignalR no Windows Service distribuem as informações recebidas à todos os clientes conectados.
- Os clientes conectados recebem a comunicação em tempo real e se necessário podem encaminhar novas informações para o Windows Service.
- O Windows Service recebe as informações de um cliente e redistribui para todos novamente (como num chat).
Desenvolvi a solução deste cenário utilizando um Windows Service gerando dados de tempo, dados aleatórios de valores e trabalhando com uma comunicação via chat.
A solução está publicada em meu GitHub
- Para testes de desenvolvimento não é necessário instalar o serviço (Windows Service), basta setar os dois projetos para iniciarem juntos e realizar um Debug.
- É possível implementar autenticação para transmitir a comunicação apenas para clientes com a devida permissão.
- É possível implementar algum Retry Pattern como o Polly caso haja alguma falha na entrega da comunicação.
Se você estiver interessado em conhecer mais e aprender como desenvolver aplicações Web com arquitetura baseada em DDD, aplicando os princípios SOLID, diversos Design Patterns e escrevendo testes de unidade inscreva-se em meu curso:
Vamos continuar a troca de experiências, deixe seu comentário abaixo, se gostou e concorda com o artigo compartilhe com seus colegas para transmitirmos o conhecimento para o máximo de pessoas possíveis.
Boa tarde!
Muito legal isso.
Só fiquei com uma dúvida.
Tentei publicar em um IIS 7, porém, no enter não faz nada.
Pelo VS funciona, mas qd publico não.
Poderia me ajudar?
Olá Fábio!
Você instalou e inicializou o serviço? Abs!
Tá habilitado o websockets n seu IIS?
Parabéns pelo post.
Eduardo, estou enfrentando um problema com SignalR, gostaria de saber se você tem alguma ideia. Eu tenho um windows service que é um cliente de um outro serviço com SignalR. Esse serviço cliente depois de um tempo iniciado consome muita memoria. E i que ele faz basicamente é se conectar no Hub e enviar mensagens.