Unterschiede zwischen SignalR und ASP.NET Core SignalR

ASP.NET Core SignalR ist nicht mit Clients oder Servern für ASP.NET SignalR kompatibel. In diesem Artikel werden Features beschrieben, die in ASP.NET Core SignalRentfernt oder geändert wurden.

Bestimmen der SignalR-Version

ASP.NET SignalR ASP.NET Core SignalR
NuGet-Paket für Server Microsoft.AspNet.SignalR Keine. Im freigegebenen Microsoft.AspNetCore.App-Framework enthalten.
NuGet-Pakete für Clients Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
npm-Paket für JavaScript-Client SignalR @microsoft/signalr
Java-Client GitHub-Repository (veraltet) Maven-Paket com.microsoft.signalr
Typ der Server-App ASP.NET (System.Web) oder OWIN Self-Host ASP.NET Core
Unterstützte Serverplattformen .NET Framework 4.5 oder höher .NET Core 3.0 oder höher
ASP.NET SignalR ASP.NET Core SignalR
NuGet-Paket für Server Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core)
Microsoft.AspNetCore.SignalR (.NET Framework)
NuGet-Pakete für Clients Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
npm-Paket für JavaScript-Client SignalR @aspnet/signalr
Java-Client GitHub-Repository (veraltet) Maven-Paket com.microsoft.signalr
Typ der Server-App ASP.NET (System.Web) oder OWIN Self-Host ASP.NET Core
Unterstützte Serverplattformen .NET Framework 4.5 oder höher .NET Framework 4.6.1 oder höher
.NET Core 2.1 oder höher

Featureunterschiede

Automatische Wiederverbindung

In ASP.NET SignalR:

  • Standardmäßig versucht SignalR, die Verbindung mit dem Server wiederherzustellen, wenn diese unterbrochen wurde.

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

Vor ASP.NET Core 3.0 unterstützt SignalR keine automatische Wiederverbindung. Wenn die Verbindung mit dem Client unterbrochen wird, muss der Benutzer explizit eine neue Verbindung aufbauen, um sich wieder zu verbinden. In ASP.NET SignalR versucht SignalR, die Verbindung mit dem Server wiederherzustellen, wenn diese unterbrochen wurde.

Protokollunterstützung

ASP.NET Core SignalR unterstützt JSON sowie ein neues binäres Protokoll, das auf MessagePack basiert. Darüber hinaus können benutzerdefinierte Protokolle erstellt werden.

Transportprotokolle

Der Forever Frame-Transport wird in ASP.NET Core SignalR nicht unterstützt.

Unterschiede auf dem Server

Die serverseitigen ASP.NET Core SignalR-Bibliotheken sind in Microsoft.AspNetCore.App enthalten, das in der Vorlage ASP.NET Core-Webanwendung sowohl für Razor- als auch MVC-Projekte verwendet wird.

ASP.NET Core SignalR ist eine ASP.NET Core-Middleware. Sie muss durch Aufrufen von AddSignalR in Startup.ConfigureServiceskonfiguriert werden.

services.AddSignalR()

Ordnen Sie zum Konfigurieren des Routings Routen innerhalb des Aufrufs der UseEndpoints-Methode in der Startup.Configure-Methode zu Hubs zu.

app.UseRouting();

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

Ordnen Sie zum Konfigurieren des Routings Routen innerhalb des Aufrufs der UseSignalR-Methode in der Startup.Configure-Methode zu Hubs zu.

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

Sitzungsaffinität

Das horizontale Skalierungsmodell für ASP.NET SignalR ermöglicht Clients, sich erneut zu verbinden und Nachrichten an jeden Server in der Farm zu senden. In ASP.NET Core SignalR muss der Client während der gesamten Dauer der Verbindung mit demselben Server interagieren. Für horizontale Skalierung mithilfe von Redis bedeutet dies, dass Sitzungsaffinität erforderlich ist. Für horizontale Skalierung mithilfe von Azure SignalR Service ist keine Sitzungsaffinität erforderlich, da der Dienst Verbindungen mit Clients handhabt.

Einzelner Hub pro Verbindung

In ASP.NET Core SignalR wurde das Verbindungsmodell vereinfacht. Verbindungen werden direkt mit einem einzelnen Hub hergestellt, anstatt eine einzelne Verbindung zur Freigabe des Zugriffs auf mehrere Hubs zu nutzen.

Streaming

ASP.NET Core SignalR unterstützt nun das Streaming von Daten vom Hub zum Client.

Zustand

Die Möglichkeit, beliebige Zustände zwischen Clients und dem Hub zu übergeben (oft HubState genannt), wurde ebenso wie die Unterstützung von Statusmeldungen entfernt. Ein Pendant zu Hubproxys gibt es derzeit noch nicht.

Entfernung von PersistentConnection

In ASP.NET Core SignalR wurde die PersistentConnection-Klasse entfernt.

GlobalHost

ASP.NET Core bietet in das Framework integrierte Dependency Injection (DI). Dienste können mithilfe von DI auf HubContext zuzugreifen. Das GlobalHost-Objekt, mit dem in ASP.NET SignalR ein HubContext abgerufen wird, gibt es in ASP.NET Core SignalR nicht.

HubPipeline

ASP.NET Core SignalR unterstützt keine HubPipeline-Module.

Unterschiede auf dem Client

TypeScript

Der ASP.NET Core SignalR-Client ist in TypeScript geschrieben. Bei Verwendung des JavaScript-Clients können Sie Code in JavaScript oder TypeScript schreiben.

Der JavaScript-Client wird unter npm gehostet

In ASP.NET-Versionen wurde der JavaScript-Client über ein NuGet-Paket in Visual Studio abgerufen. In den ASP.NET Core-Versionen enthält das npm-Paket @microsoft/signalr die JavaScript-Bibliotheken. Dieses Paket ist nicht in der Vorlage ASP.NET Core-Webanwendung enthalten. Verwenden Sie npm, um das npm-Paket @microsoft/signalr abzurufen und zu installieren.

npm init -y
npm install @microsoft/signalr

In ASP.NET-Versionen wurde der JavaScript-Client über ein NuGet-Paket in Visual Studio abgerufen. In den ASP.NET Core-Versionen enthält das npm-Paket @aspnet/signalr die JavaScript-Bibliotheken. Dieses Paket ist nicht in der Vorlage ASP.NET Core-Webanwendung enthalten. Verwenden Sie npm, um das npm-Paket @aspnet/signalr abzurufen und zu installieren.

npm init -y
npm install @aspnet/signalr

jQuery

Die Abhängigkeit von jQuery wurde entfernt, in Projekten kann jQuery jedoch weiterhin verwendet werden.

Unterstützung von Internet Explorer

ASP.NET Core SignalR unterstützt Microsoft Internet Explorer nicht, während ASP.NET SignalR Microsoft Internet Explorer ab Version 8 unterstützt. Weitere Informationen finden Sie unter Von ASP.NET Core SignalR unterstützte Plattformen.

Syntax von JavaScript-Clientmethoden

Die JavaScript-Syntax wurde gegenüber der ASP.NET-Version von SignalR geändert. Anstatt das $connection-Objekt zu verwenden, erstellen Sie eine Verbindung mithilfe der HubConnectionBuilder-API.

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

Verwenden Sie die on-Methode, um Clientmethoden anzugeben, die der Hub aufrufen kann.

Die JavaScript-Syntax wurde gegenüber der ASP.NET-Version von SignalR geändert. Anstatt das $connection-Objekt zu verwenden, erstellen Sie eine Verbindung mithilfe der HubConnectionBuilder-API.

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

Verwenden Sie die on-Methode, um Clientmethoden anzugeben, die der Hub aufrufen kann.

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

Starten Sie nach dem Erstellen der Clientmethode die Verbindung mit dem Hub. Verketten sie eine Catch-Methode, um Fehler zu protokollieren oder zu behandeln.

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

Hubproxys

Hubproxys werden nicht mehr automatisch generiert. Stattdessen wird der Methodenname als Zeichenfolge an die Aufruf-API übergeben.

Hubproxys werden nicht mehr automatisch generiert. Stattdessen wird der Methodenname als Zeichenfolge an die Aufruf-API übergeben.

.NET- und andere Clients

Das NuGet-Paket Microsoft.AspNetCore.SignalR.Client enthält die .NET-Clientbibliotheken für ASP.NET Core SignalR.

Verwenden Sie HubConnectionBuilder, um eine Instanz einer Verbindung mit einem Hub zu erstellen und herzustellen.

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

Unterschiede bei der horizontalen Skalierung

ASP.NET SignalR unterstützt SQL Server und Redis. ASP.NET Core SignalR unterstützt Azure SignalR Service und Redis.

ASP.NET

ASP.NET Core

Zusätzliche Ressourcen