Compartir a través de


Diferencias entre ASP.NET SignalR y ASP.NET Core SignalR

ASP.NET Core SignalR no es compatible con clientes o servidores para ASP.NET SignalR. En este artículo se detallan las características que se han quitado o cambiado en ASP.NET Core SignalR.

Cómo identificar la versión de SignalR

ASP.NET SignalR SignalR de ASP.NET Core
Paquete NuGet del servidor Microsoft.AspNet.SignalR Ninguno. Incluido en el marco compartido de Microsoft.AspNetCore.App.
Paquetes NuGet de cliente Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
Paquete npm de cliente de JavaScript signalr @microsoft/signalr
Cliente de Java Repositorio de GitHub (en desuso) Paquete Maven com.microsoft.signalr
Tipo de aplicación del servidor ASP.NET (System.Web) u OWIN autohospedado ASP.NET Core
Plataformas de servidor compatibles .NET Framework 4.5 o versiones posteriores .NET Core 3.0 o una versión posterior
ASP.NET SignalR SignalR de ASP.NET Core
Paquete NuGet del servidor Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core)
Microsoft.AspNetCore.SignalR (.NET Framework)
Paquetes NuGet de cliente Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
Paquete npm de cliente de JavaScript signalr @aspnet/signalr
Cliente de Java Repositorio de GitHub (en desuso) Paquete Maven com.microsoft.signalr
Tipo de aplicación del servidor ASP.NET (System.Web) u OWIN autohospedado ASP.NET Core
Plataformas de servidor compatibles .NET Framework 4.5 o versiones posteriores .NET Framework 4.6.1 o versiones posteriores
.NET Core 2.1 o posterior

Diferencias de características

Reconexión automática

En ASP.NET SignalR:

  • De forma predeterminada, SignalR intenta volver a conectarse al servidor si se anula la conexión.

En ASP.NET Core SignalR:

HubConnection connection = new HubConnectionBuilder()
    .WithUrl(new Uri("http://127.0.0.1:5000/chathub"))
    .WithAutomaticReconnect()
    .Build();
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .withAutomaticReconnect()
    .build();

Antes de ASP.NET Core 3.0, SignalR no admite reconexiones automáticas. Si el cliente está desconectado, el usuario debe iniciar explícitamente una nueva conexión para volver a conectarse. En ASP.NET SignalR, SignalR intenta volver a conectarse al servidor si se anula la conexión.

Compatibilidad con protocolos

ASP.NET Core SignalR admite JSON, así como un nuevo protocolo binario basado en MessagePack. Además, se pueden crear protocolos personalizados.

Transportes

El transporte de Forever Frame no es compatible en ASP.NET Core SignalR.

Diferencias en el servidor

Las bibliotecas del lado servidor de ASP.NET Core SignalR se incluyen en Microsoft.AspNetCore.App, que se usa en la plantilla de aplicación web de ASP.NET Core para proyectos de Razor y MVC.

ASP.NET Core SignalR es un middleware de ASP.NET Core. Debe configurarse llamando a AddSignalR en Startup.ConfigureServices.

services.AddSignalR()

Para configurar el enrutamiento, asigne rutas a los concentradores dentro de la llamada al método UseEndpoints en el método Startup.Configure.

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<ChatHub>("/hub");
});

Para configurar el enrutamiento, asigne rutas a los concentradores dentro de la llamada al método UseSignalR en el método Startup.Configure.

app.UseSignalR(routes =>
{
    routes.MapHub<ChatHub>("/hub");
});

Sesiones permanentes

El modelo de escalado horizontal para ASP.NET SignalR permite a los clientes volver a conectarse y enviar mensajes a cualquier servidor de la granja de servidores. En ASP.NET Core SignalR, el cliente debe interactuar con el mismo servidor por la duración de la conexión. Para el escalado horizontal mediante Redis, esto significa que se requieren sesiones permanentes. Para el escalado horizontal mediante el servicio de Azure SignalR, las sesiones permanentes no son necesarias porque el servicio controla las conexiones a los clientes.

Concentrador único por conexión

En ASP.NET Core SignalR, el modelo de conexión se ha simplificado. Las conexiones se realizan directamente a un solo concentrador, en lugar de usar una sola conexión para compartir el acceso a varios concentradores.

Streaming

ASP.NET Core SignalR permite la transmisión de datos desde el concentrador al cliente.

State

Se ha quitado la capacidad de pasar un estado arbitrario entre los clientes y el concentrador (a menudo denominado HubState), así como la compatibilidad con los mensajes de progreso. No hay ningún homólogo de proxys de concentrador en este momento.

Eliminación de PersistentConnection

En ASP.NET Core SignalR, se ha quitado la clase PersistentConnection.

GlobalHost

ASP.NET Core tiene integrada la inserción de dependencias (DI) en el marco. Los servicios pueden usar la DI para acceder a HubContext. El objeto GlobalHost que se usa en ASP.NET SignalR para obtener un HubContext no existe en ASP.NET Core SignalR.

HubPipeline

ASP.NET Core SignalR no admite módulos HubPipeline.

Diferencias en el cliente

TypeScript

El cliente ASP.NET Core SignalR se escribe en TypeScript. Puede escribir en JavaScript o TypeScript al usar el cliente de JavaScript.

El cliente de JavaScript se hospeda en npm

En las versiones de ASP.NET, el cliente de JavaScript se obtuvo a través de un paquete NuGet en Visual Studio. En las versiones de ASP.NET Core, el paquete npm @microsoft/signalr contiene las bibliotecas de JavaScript. Este paquete no se incluye en la plantilla aplicación web de ASP.NET Core. Use npm para obtener e instalar el paquete npm @microsoft/signalr.

npm init -y
npm install @microsoft/signalr

En las versiones de ASP.NET, el cliente de JavaScript se obtuvo a través de un paquete NuGet en Visual Studio. En las versiones de ASP.NET Core, el paquete npm @aspnet/signalr contiene las bibliotecas de JavaScript. Este paquete no se incluye en la plantilla aplicación web de ASP.NET Core. Use npm para obtener e instalar el paquete npm @aspnet/signalr.

npm init -y
npm install @aspnet/signalr

jQuery

La dependencia de jQuery se ha quitado, pero los proyectos todavía pueden usar jQuery.

Compatibilidad con Internet Explorer

ASP.NET Core SignalR no admite Microsoft Internet Explorer, mientras que ASP.NET SignalR admite Microsoft Internet Explorer 8 o posterior. Para más información, consulte Plataformas de ASP.NET Core SignalR compatibles.

Sintaxis del método cliente de JavaScript

La sintaxis de JavaScript ha cambiado desde la versión ASP.NET de SignalR. En lugar de usar el objeto $connection, cree una conexión mediante la API HubConnectionBuilder.

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Use el método on para especificar los métodos cliente a los que puede llamar el concentrador.

La sintaxis de JavaScript ha cambiado desde la versión ASP.NET de SignalR. En lugar de usar el objeto $connection, cree una conexión mediante la API HubConnectionBuilder.

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Use el método on para especificar los métodos cliente a los que puede llamar el concentrador.

connection.on("ReceiveMessage", (user, message) => {
    const msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    const encodedMsg = `${user} says ${msg}`;
    console.log(encodedMsg);
});

Después de crear el método de cliente, inicie la conexión del concentrador. Encadene un método catch para registrar o controlar los errores.

connection.start().catch(err => console.error(err));

Proxys del concentrador

Los servidores proxy del concentrador ya no se generan automáticamente. En su lugar, el nombre del método se pasa a la API invoke como una cadena.

Los servidores proxy del concentrador ya no se generan automáticamente. En su lugar, el nombre del método se pasa a la API invoke como una cadena.

.NET y otros clientes

El paquete NuGet de Microsoft.AspNetCore.SignalR.Client contiene las bibliotecas cliente de .NET para ASP.NET Core SignalR.

Use HubConnectionBuilder para crear y compilar una instancia de una conexión a un concentrador.

connection = new HubConnectionBuilder()
    .WithUrl("url")
    .Build();

Diferencias de escalado horizontal

ASP.NET SignalR es compatible con SQL Server y Redis. ASP.NET Core SignalR admite el servicio de Azure SignalR y Redis.

ASP.NET

ASP.NET Core

Recursos adicionales