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é) | Package Maven 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é) | Package Maven 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 :
- Les reconnexions automatiques sont des connexions avec le client .NET et le client 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();
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
ASP.NET Core SignalR 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, "&").replace(/</g, "<").replace(/>/g, ">");
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
- SignalR Scale-out avec Azure Service Bus
- SignalRScale-out avec Redis
- SignalRScale-out avec SQL Server