Différences entre ASP.NET SignalR et ASP.NET Core SignalR

SignalR ASP.NET Core n’est pas compatible avec les clients ou les serveurs pour ASP.NET SignalR. Cet article détaille les fonctionnalités qui ont été supprimées ou modifiées dans ASP.NET Core SignalR.

Comment identifier la version SignalR

ASP.NET SignalR ASP.NET Core SignalR
Package NuGet serveur Microsoft.AspNet.SignalR Aucun. Inclus dans l’infrastructure partagée Microsoft.AspNetCore.App.
Packages NuGet clients Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
Package npm du client JavaScript signalr @microsoft/signalr
Client Java Dépôt GitHub (déconseillé) Maven package com.microsoft.signalr
Type d’application serveur ASP.NET (System.Web) ou Self-Host OWIN ASP.NET Core
Plateformes serveur prises en charge .NET Framework 4.5 ou ultérieur .NET Core 3.0 ou ultérieur
ASP.NET SignalR ASP.NET Core SignalR
Package NuGet serveur Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core)
Microsoft.AspNetCore.SignalR (.NET Framework)
Packages NuGet clients Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
Package npm du client JavaScript signalr @aspnet/signalr
Client Java Dépôt GitHub (déconseillé) Maven package com.microsoft.signalr
Type d’application serveur ASP.NET (System.Web) ou Self-Host OWIN ASP.NET Core
Plateformes serveur prises en charge .NET Framework 4.5 ou ultérieur .NET Framework 4.6.1 ou ultérieur
.NET Core 2.1 ou version ultérieure

Différences de fonctionnalités

Reconnexions automatiques

Dans ASP.NET SignalR :

  • Par défaut, SignalR tente de se reconnecter au serveur si la connexion est supprimée.

Dans 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();

Avant ASP.NET Core 3.0, SignalR ne prend pas en charge les reconnexions automatiques. Si le client est déconnecté, l’utilisateur doit explicitement démarrer une nouvelle connexion pour se reconnecter. Dans ASP.NET SignalR, SignalR tente de se reconnecter au serveur si la connexion est supprimée.

Prise en charge de protocole

SignalR ASP.NET Core prend en charge JSON, ainsi qu’un nouveau protocole binaire basé sur MessagePack. En outre, des protocoles personnalisés peuvent être créés.

Transports

Le transport Forever Frame n'est pas pris en charge dans ASP.NET Core SignalR.

Différences sur le serveur

Les bibliothèques côté serveur ASP.NET Core SignalR sont incluses dans Microsoft.AspNetCore.App, qui est utilisé dans le modèle d’application web ASP.NET Core pour les projets et MVC Razor.

SignalR ASP.NET Core est un intergiciel ASP.NET Core. Il doit être configuré en appelant AddSignalR dans Startup.ConfigureServices.

services.AddSignalR()

Pour configurer le routage, mappez les itinéraires aux hubs à l’intérieur de l’appel de méthode UseEndpoints dans la méthode Startup.Configure.

app.UseRouting();

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

Pour configurer le routage, mappez les itinéraires aux hubs à l’intérieur de l’appel de méthode UseSignalR dans la méthode Startup.Configure.

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

Sessions collantes

Le modèle de scale-out pour ASP.NET SignalR permet aux clients de se reconnecter et d’envoyer des messages à n’importe quel serveur de la batterie de serveurs. Dans ASP.NET Core SignalR, le client doit interagir avec le même serveur pendant la durée de la connexion. Pour un scale-out à l’aide de Redis, cela signifie que des sessions collantes sont nécessaires. Pour un scale-out à l’aide du service SignalRAzure, les sessions persistantes ne sont pas nécessaires, car le service gère les connexions aux clients.

Hub unique par connexion

Dans ASP.NET Core SignalR, le modèle de connexion a été simplifié. Les connexions sont établies directement à un seul hub, plutôt qu’une seule connexion utilisée pour partager l’accès à plusieurs hubs.

Streaming

ASP.NET Core SignalR prend en charge le streaming de données du hub vers le client.

State

La possibilité de passer un état arbitraire entre les clients et le hub (souvent appelé HubState) a été supprimée, ainsi que la prise en charge des messages de progression. Il n’existe aucun équivalent des proxys hub pour le moment.

Suppression de PersistentConnection

Dans ASP.NET Core SignalR, la classe PersistentConnection a été supprimée.

GlobalHost

ASP.NET Core a une injection de dépendances intégrée dans le framework. Les services peuvent utiliser DI pour accéder au HubContext. L’objet GlobalHost utilisé dans ASP.NET SignalR pour obtenir un HubContext n’existe pas dans ASP.NET Core SignalR.

HubPipeline

SignalR ASP.NET Core ne prend pas en charge les modules HubPipeline.

Différences sur le client

TypeScript

Le client ASP.NET Core SignalR est écrit en TypeScript. Vous pouvez écrire en JavaScript ou TypeScript lorsque vous utilisez le client JavaScript.

Le client JavaScript est hébergé sur npm

Dans les versions ASP.NET, le client JavaScript a été obtenu via un package NuGet dans Visual Studio. Dans les versions ASP.NET Core, le package npm @microsoft/signalr contient les bibliothèques JavaScript. Ce package n’est pas inclus dans le modèle d’application web ASP.NET Core. Utilisez npm pour obtenir et installer le package npm @microsoft/signalr.

npm init -y
npm install @microsoft/signalr

Dans les versions ASP.NET, le client JavaScript a été obtenu via un package NuGet dans Visual Studio. Dans les versions ASP.NET Core, le package npm @aspnet/signalr contient les bibliothèques JavaScript. Ce package n’est pas inclus dans le modèle d’application web ASP.NET Core. Utilisez npm pour obtenir et installer le package npm @aspnet/signalr.

npm init -y
npm install @aspnet/signalr

jQuery

La dépendance à jQuery a été supprimée, mais les projets peuvent toujours utiliser jQuery.

Prise en charge d'Internet Explorer

SignalR ASP.NET Core ne prend pas en charge Microsoft Internet Explorer, tandis que ASP.NET SignalR prend en charge Microsoft Internet Explorer 8 ou version ultérieure. Pour plus d’informations, consultez ASP.NET Core SignalR sur les plateformes prises en charge.

Syntaxe de la méthode cliente JavaScript

La syntaxe JavaScript a changé depuis la version ASP.NET de SignalR. Au lieu d’utiliser l’objet $connection, créez une connexion à l’aide de l’API HubConnectionBuilder.

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

Utilisez la méthode on pour spécifier les méthodes clientes que le hub peut appeler.

La syntaxe JavaScript a changé depuis la version ASP.NET de SignalR. Au lieu d’utiliser l’objet $connection, créez une connexion à l’aide de l’API HubConnectionBuilder.

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

Utilisez la méthode on pour spécifier les méthodes clientes que le hub peut appeler.

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);
});

Après avoir créé la méthode cliente, démarrez la connexion hub. Chaînez une méthode catch pour journaliser ou gérer les erreurs.

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

Proxys hub

Les proxys hub ne sont plus générés automatiquement. Au lieu de cela, le nom de la méthode est passé dans l’API invoke sous la forme d’une chaîne.

Les proxys hub ne sont plus générés automatiquement. Au lieu de cela, le nom de la méthode est passé dans l’API invoke sous la forme d’une chaîne.

.NET et autres clients

Microsoft.AspNetCore.SignalR Le package NuGet client contient les bibliothèques clientes .NET pour ASP.NET Core SignalR.

Utilisez HubConnectionBuilder pour créer et créer un instance d’une connexion à un hub.

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

Différences de scale-out

ASP.NET SignalR prend en charge SQL Server et Redis. ASP.NET Core SignalRprend en charge Azure SignalRService et Redis.

ASP.NET

ASP.NET Core

Ressources supplémentaires