SignalR para C# (.NET): guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é SignalR e para que serve?

\n\n

SignalR é uma biblioteca para ASP.NET Core que simplifica a adição de funcionalidades em tempo real (real-time) em aplicações web. Ela permite que o servidor envie dados instantaneamente para clientes conectados (navegadores, aplicativos móveis, aplicativos desktop) sem a necessidade de requisições constantes do cliente.

\n\n

Para que serve? O protocolo HTTP tradicional funciona no princípio de "requisição-resposta": o cliente envia uma requisição, o servidor responde. Para receber atualizações, o cliente precisa consultar o servidor constantemente (polling). Isso é ineficiente e causa atrasos. O SignalR resolve esse problema fornecendo uma conexão bidirecional permanente.

\n\n

Principais cenários de uso:

\n
    \n
  • Chats e mensageiros (entrega instantânea de mensagens)
  • \n
  • Painéis de monitoramento e dashboards (atualização de taxas de câmbio, cotações de ações)
  • \n
  • Edição colaborativa de documentos (estilo Google Docs)
  • \n
  • Notificações em tempo real (novos pedidos, alertas)
  • \n
  • Jogos multijogador
  • \n
  • Progresso de execução de operações longas (upload de arquivos, processamento de dados)
  • \n
\n\n

O SignalR escolhe automaticamente o melhor protocolo de transporte para a conexão:

\n
    \n
  • WebSocket — o mais eficiente, conexão bidirecional permanente
  • \n
  • Server-Sent Events (SSE) — transmissão unidirecional do servidor para o cliente
  • \n
  • Long Polling — mecanismo de fallback, caso WebSocket e SSE não estejam disponíveis
  • \n
\n\n

Instalação do SignalR

\n\n

Instalação no servidor (ASP.NET Core)

\n

Para a parte do servidor, utiliza-se o pacote NuGet. Execute no terminal:

\n
dotnet add package Microsoft.AspNetCore.SignalR
\n

Ou através do Package Manager Console no Visual Studio:

\n
Install-Package Microsoft.AspNetCore.SignalR
\n\n

Instalação do cliente para JavaScript (navegador)

\n

Para a parte do cliente (navegador), utilize npm:

\n
npm install @microsoft/signalr
\n

Ou inclua via CDN:

\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.0/signalr.min.js"></script>
\n\n

Instalação do cliente para .NET (C#)

\n

Para o cliente em C# (por exemplo, aplicação console ou WPF):

\n
dotnet add package Microsoft.AspNetCore.SignalR.Client
\n\n

Início rápido: exemplo "Hello, World!"

\n\n

Vamos criar um chat simples: o servidor recebe uma mensagem e a distribui para todos os clientes conectados.

\n\n

Passo 1: Criando um Hub (parte do servidor)

\n

Crie o arquivo ChatHub.cs:

\n
using Microsoft.AspNetCore.SignalR;\n\nnamespace SignalRChat.Hubs\n{\n    public class ChatHub : Hub\n    {\n        public async Task SendMessage(string user, string message)\n        {\n            // Envia a mensagem para todos os clientes conectados\n            await Clients.All.SendAsync("ReceiveMessage", user, message);\n        }\n    }\n}\n
\n\n

Passo 2: Registrando o SignalR no Program.cs

\n
using SignalRChat.Hubs;\n\nvar builder = WebApplication.CreateBuilder(args);\n\n// Adiciona o SignalR\nbuilder.Services.AddSignalR();\n\nvar app = builder.Build();\n\napp.MapGet("/", () => "Hello World!");\n\n// Mapeia o hub para o caminho /chatHub\napp.MapHub<ChatHub>("/chatHub");\n\napp.Run();\n
\n\n

Passo 3: Criando o cliente (HTML + JavaScript)

\n
<!DOCTYPE html>\n<html>\n<head>\n    <title>SignalR Chat</title>\n</head>\n<body>\n    <h2>SignalR Chat</h2>\n    <div>\n        <input type="text" id="userInput" placeholder="Seu nome" />\n        <input type="text" id="messageInput" placeholder="Mensagem" />\n        <button onclick="sendMessage()">Enviar</button>\n    </div>\n                    

Recommendations