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:
- Las reconexiones automáticas son opcionales tanto con el cliente de .NET como con el cliente de JavaScript:
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, "&").replace(/</g, "<").replace(/>/g, ">");
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
- Escalabilidad horizontal de SignalR con Azure Service Bus
- Escalabilidad horizontal de SignalR con Redis
- Escalabilidad horizontal de SignalR con SQL Server