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:
- Automatische Wiederverbindungen sind sowohl mit dem .NET-Client als auch mit dem JavaScript-Client möglich:
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.ConfigureServices
konfiguriert 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, "&").replace(/</g, "<").replace(/>/g, ">");
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
- Horizontale Skalierung in SignalR mit Azure Service Bus
- Horizontale Skalierung in SignalR mit Redis
- Horizontale Skalierung in SignalR mit SQL Server