Desenvolvimento - ASP. NET
SignalR: Desenvolvendo um chat em ASP.NET
Neste artigo iremos desenvolver uma aplicação que simule a função de um chat utilizando SignalR em Asp.Net
por Guilherme SeabraExistem diversas dificuldades ao se desenvolver uma aplicação web real-time, entre as principais estão a latência de rede entre o seu usuário e seus servidores, o volume de conexões com o servidor, a maneira que o servidor trata as requisições que ficam esperando uma atualização, e a maneira que a interface client de sua aplicação atualiza as novas informações.
Interatividade em tempo real, acesso de múltiplos usuários atuando colaborativamente e acesso assíncrono são algumas das dificuldades que temos que transpor para criarmos uma aplicação Web com uma experiência rica ao usuário final, para isso foi o SignalIR por dois funcionários da Microsoft : Damian Edwards e David Fowler.
SignalR é uma biblioteca assíncrona voltada para aplicações .NET que foi criada com o intuito de ajudar a criar aplicações web interativas com troca de mensagens em tempo real para multi-usuários. Com SignalR podemos trabalhar praticamente como uma conexão sempre aberta onde no servidor poderemos detectar quando um novo cliente se conectou e se desconectou, enviar e receber mensagens dos clientes, etc.
Na verdade, as conexões persistentes realmente não existem sendo apenas uma abstração criada pela SignalR que faz o trabalho sujo por trás dos panos mantendo a conexão dos clientes com o servidor usando mecanismos de transportes (WebSockets) que são um conjunto de tecnologias usadas para manter a 'ilusão' da conexão contínua.
Essa tecnologia ainda esta em desenvolvimento e não funciona em todos os navegadores mas dá suporte ao SilverLight, WinRT, JavaScript, WindowsPhone7.
Basicamente, o SignalR funciona através do gerenciamento de uma conexão persistente entre o servidor e o cliente.
Primeiramente devemos instalar o complemento do SignalIR ao VisualStudio 2012, Microsoft ASP.NETeWeb Tools 2012.2 for Visual Studio 2012que pode ser baixado usando Web Plataform Installer.
Primeiramente para o desenvolvimento do chat vamos instalar o SignalIR:

Figura 1: Tela inicial do Web Plataform Installer 4.5.
Abaixo podemos ver os pré-requisitos do processo de instalação do Web Plataform Installer 4.5.

Figura 2: Na tela de pré-requisitos é necessário marcar a checkbox e clicar no botão “Aceito”.
Abaixo vemos a tela de finalização da instalação do Web Plataform Installer 4.5.

Figura 3: Na tela de finalização do Web Plataform Installer 4.5 é necessário clicar em “Concluir”.
Agora vamos começar o desenvolvimento da aplicação.

Figura 4: Vamos criar um novo projeto em File -> New -> Project.
Primeiro, crie um novo projeto em Asp.net:

Figura 5: Vamos selecionar a opção C# -> Web -> Asp.NET Empty Web Application.
Agora, insira um novo item no projeto solução:

Figura 6: Vamos agora com o botão direito em cima do projeto e adicionar uma nova classe chamada “ChatHub”.
Vamos agora inserir o seguinte código dentro da classe “ChatHub”, para criar a rotina de conexão entre cliente/servidor.
Listagem 1: Inserindo o conteúdo da nova classe ChatHub:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace ChatSignalIR
{
public class ChatHub : Hub
{
public void Send(string nome, string mensagem)
{
Clients.All.broadcastMessage(nome,mensagem);
}
}
}
Vamos inserir o projeto uma nova pagina html chamada de “HtmlChat”, essa tela será a pagina de comunicação do chat.

Figura 7: Inserindo ao projeto uma nova página Html.
Após isso tudo, é necessário codificar a página HTML, vejamos como ficará o código abaixo.
Listagem 2: Codificando a página Html.
<!DOCTYPE html>
<html>
<head>
<title>Chat SignalR Simples</title>
<style type="text/css">
.container {
background-color: #99CCFF;
border: thick solid #808080;
padding: 20px;
margin: 20px;
}
</style>
</head>
<body>
<div class="container">
<input type="text" id="mensagem" />
<input type="button" id="enviamensagem" value="Enviar" />
<input type="hidden" id="exibenome" />
<ul id="discussion">
</ul>
</div>
<!--Script references. -->
<!--Reference the jQuery library. -->
<script src="/Scripts/jquery-1.8.2.min.js" ></script>
<!--Reference the SignalR library. -->
<script src="/Scripts/jquery.signalR-1.0.0.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="/signalr/hubs"></script>
<script type="text/javascript">
$(function () {
// Declar um proxy para referenciar o hub.
var chat = $.connection.chatHub;
// Cria a função que o run pode chamar para mensagens de broadcast
chat.client.broadcastMessage = function (nome, mensagem) {
// Html encode exibe o nome e mensagem
var encodednome = $('<div />').text(nome).html();
var encodedMsg = $('<div />').text(mensagem).html();
$('#discussion').append('<li><strong>' + encodednome
+ '</strong>: ' + encodedMsg + '</li>');
};
// Pega o nome do usuário e armazena
$('#exibenome').val(prompt('Informe o seu nome :', ''));
// Define o focus inicial para a caixa de mensagem
$('#mensagem').focus();
// Inicia a conexão
$.connection.hub.start().done(function () {
$('#enviamensagem').click(function () {
// Chama o método Send no hub.
chat.server.send($('#exibenome').val(), $('#mensagem').val());
// Limpa o textbox e reseta o focus para o proximo comentario
$('#mensagem').val('').focus();
});
});
});
</script>
</body>
</html>
Pronto, temos nossa aplicação pronta, agora é só rodar e testar essa nova função:

Figura 8: Página Web do chat em execução.
Esse foi um exemplo prático de como criar um chat utilizando o SignlIR. Espero que tenham gostado, qualquer dúvida vocês podem entrar em contato comigo pelo email: guilhermemaiaseabra@gmail.com ou via Skype: guilhermemaiaseabra, bom desenvolvimento a todos e até a próxima.


