SignalR para C# (.NET): guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es SignalR y para qué sirve?

\n\n

SignalR es una biblioteca para ASP.NET Core que simplifica la adición de funciones en tiempo real (real-time) en aplicaciones web. Permite que el servidor envíe datos instantáneamente a los clientes conectados (navegadores, aplicaciones móviles, aplicaciones de escritorio) sin necesidad de solicitudes constantes por parte del cliente.

\n\n

¿Para qué sirve? El protocolo HTTP tradicional funciona bajo el principio de "solicitud-respuesta": el cliente envía una solicitud, el servidor responde. Para recibir actualizaciones, el cliente debe consultar constantemente al servidor (polling). Esto es ineficiente y genera retrasos. SignalR resuelve este problema proporcionando una conexión bidireccional permanente.

\n\n

Casos de uso principales:

\n
    \n
  • Chats y mensajería instantánea (entrega inmediata de mensajes)
  • \n
  • Paneles de monitoreo y dashboards (actualización de tipos de cambio, cotizaciones de acciones)
  • \n
  • Edición colaborativa de documentos (similar a Google Docs)
  • \n
  • Notificaciones en tiempo real (nuevos pedidos, alertas)
  • \n
  • Juegos multijugador
  • \n
  • Progreso de operaciones largas (carga de archivos, procesamiento de datos)
  • \n
\n\n

SignalR selecciona automáticamente el mejor protocolo de transporte para la conexión:

\n
    \n
  • WebSocket — el más eficiente, conexión bidireccional permanente
  • \n
  • Server-Sent Events (SSE) — transmisión unidireccional del servidor al cliente
  • \n
  • Long Polling — mecanismo de respaldo si WebSocket y SSE no están disponibles
  • \n
\n\n

Instalación de SignalR

\n\n

Instalación en el servidor (ASP.NET Core)

\n

Para la parte del servidor se utiliza el paquete NuGet. Ejecute en la terminal:

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

O a través de Package Manager Console en Visual Studio:

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

Instalación del cliente para JavaScript (navegador)

\n

Para la parte del cliente (navegador) use npm:

\n
npm install @microsoft/signalr
\n

O conéctelo a través de CDN:

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

Instalación del cliente para .NET (C#)

\n

Para el cliente en C# (por ejemplo, aplicación de consola o WPF):

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

Inicio rápido: ejemplo "¡Hola, Mundo!"

\n\n

Creemos un chat simple: el servidor recibe un mensaje y lo distribuye a todos los clientes conectados.

\n\n

Paso 1: Crear un Hub (parte del servidor)

\n

Cree el archivo 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            // Envía el mensaje a todos los clientes conectados\n            await Clients.All.SendAsync("ReceiveMessage", user, message);\n        }\n    }\n}\n
\n\n

Paso 2: Registrar SignalR en Program.cs

\n
using SignalRChat.Hubs;\n\nvar builder = WebApplication.CreateBuilder(args);\n\n// Agregar SignalR\nbuilder.Services.AddSignalR();\n\nvar app = builder.Build();\n\napp.MapGet("/", () => "Hello World!");\n\n// Mapear el hub a la ruta /chatHub\napp.MapHub<ChatHub>("/chatHub");\n\napp.Run();\n
\n\n

Paso 3: Crear el 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="Su nombre" />\n        <input type="text" id="messageInput" placeholder="Mensaje" />\n        <button onclick="sendMessage()">Enviar</button>\n    </div>\n                    

Recommendations