Differenze tra ASP.NET SignalR e ASP.NET Core SignalR
ASP.NET Core SignalR non è compatibile con client o server per ASP.NET SignalR. Questo articolo illustra in dettaglio le funzionalità che sono state rimosse o modificate in ASP.NET Core SignalR.
Come identificare la SignalR versione
ASP.NET SignalR | ASP.NET Core SignalR | |
---|---|---|
Pacchetto NuGet server | Microsoft.AspNet.SignalR | Nessuno. Incluso nel framework condiviso Microsoft.AspNetCore.App . |
Pacchetti NuGet client | Microsoft.AspNet.SignalR. Cliente Microsoft.AspNet.SignalR.JS |
Microsoft.AspNetCore.SignalR. Cliente |
Pacchetto npm client JavaScript | signalr | @microsoft/signalr |
Client Java | Repository GitHub (deprecato) | Pacchetto Maven com.microsoft.signalr |
Tipo di app server | ASP.NET (System.Web) o self-host OWIN | ASP.NET Core |
Piattaforme server supportate | .NET Framework 4.5 o versione successiva | .NET Core 3.0 o versione successiva |
ASP.NET SignalR | ASP.NET Core SignalR | |
---|---|---|
Pacchetto NuGet server | Microsoft.AspNet.SignalR | Microsoft.AspNetCore.App (.NET Core) Microsoft.AspNetCore.SignalR (.NET Framework) |
Pacchetti NuGet client | Microsoft.AspNet.SignalR. Cliente Microsoft.AspNet.SignalR.JS |
Microsoft.AspNetCore.SignalR. Cliente |
Pacchetto npm client JavaScript | signalr | @aspnet/signalr |
Client Java | Repository GitHub (deprecato) | Pacchetto Maven com.microsoft.signalr |
Tipo di app server | ASP.NET (System.Web) o self-host OWIN | ASP.NET Core |
Piattaforme server supportate | .NET Framework 4.5 o versione successiva | .NET Framework 4.6.1 o versioni successive .NET Core 2.1 o versioni successive |
Differenze di funzionalità
Riconnessioni automatiche
In ASP.NET SignalR:
- Per impostazione predefinita, SignalR tenta di riconnettersi al server se la connessione viene eliminata.
In ASP.NET Core SignalR:
- Le riconnessioni automatiche sono esplicite sia con il client .NET che con il 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();
Prima di ASP.NET Core 3.0, SignalR non supporta le riconnessioni automatiche. Se il client è disconnesso, l'utente deve avviare in modo esplicito una nuova connessione per riconnettersi. In ASP.NET SignalRtenta SignalR di riconnettersi al server se la connessione viene eliminata.
Supporto del protocollo
ASP.NET Core SignalR supporta JSON, nonché un nuovo protocollo binario basato su MessagePack. È anche possibile creare protocolli personalizzati.
Trasporti
Il trasporto Forever Frame non è supportato in ASP.NET Core SignalR.
Differenze nel server
Le librerie lato server ASP.NET Core SignalR sono incluse in Microsoft.AspNetCore.App, che viene usato nel modello ASP.NET Core Web Application per i Razor progetti sia per i progetti MVC.
ASP.NET Core SignalR è un middleware ASP.NET Core. Deve essere configurato chiamando AddSignalR in Startup.ConfigureServices
.
services.AddSignalR()
Per configurare il routing, eseguire il mapping delle route agli hub all'interno della chiamata al UseEndpoints metodo nel Startup.Configure
metodo .
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/hub");
});
Per configurare il routing, eseguire il mapping delle route agli hub all'interno della chiamata al UseSignalR metodo nel Startup.Configure
metodo .
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("/hub");
});
Sessioni permanenti
Il modello di scalabilità orizzontale per ASP.NET SignalR consente ai client di riconnettersi e inviare messaggi a qualsiasi server della farm. In ASP.NET Core SignalRil client deve interagire con lo stesso server per la durata della connessione. Per il scaleout con Redis, ciò significa che sono necessarie sessioni permanenti. Per il servizio di scalabilità orizzontale con il servizio di AzureSignalR, le sessioni permanenti non sono necessarie perché il servizio gestisce le connessioni ai client.
Hub singolo per connessione
In ASP.NET Core SignalRil modello di connessione è stato semplificato. Le connessioni vengono effettuate direttamente a un singolo hub, anziché a una singola connessione usata per condividere l'accesso a più hub.
Streaming
ASP.NET Core SignalR supporta ora lo streaming dei dati dall'hub al client.
Provincia
La possibilità di passare uno stato arbitrario tra i client e l'hub (spesso chiamato HubState
) è stata rimossa, nonché il supporto per i messaggi di stato. Al momento non esiste alcuna controparte dei proxy hub.
Rimozione di PersistentConnection
In ASP.NET Core SignalRla classe PersistentConnection è stata rimossa.
GlobalHost
ASP.NET Core include inserimento delle dipendenze (DI) integrato nel framework. I servizi possono usare l'inserimento delle dipendenze per accedere a HubContext. L'oggetto GlobalHost
usato in ASP.NET SignalR per ottenere un HubContext
oggetto non esiste in ASP.NET Core SignalR.
HubPipeline
ASP.NET Core SignalR non dispone del supporto per HubPipeline
i moduli.
Differenze nel client
TypeScript
Il client ASP.NET Core SignalR viene scritto in TypeScript. È possibile scrivere in JavaScript o TypeScript quando si usa il client JavaScript.
Il client JavaScript è ospitato in npm
Nelle versioni ASP.NET il client JavaScript è stato ottenuto tramite un pacchetto NuGet in Visual Studio. Nelle versioni di ASP.NET Core il @microsoft/signalr
pacchetto npm contiene le librerie JavaScript. Questo pacchetto non è incluso nel modello applicazione Web principale di ASP.NET. Usare npm per ottenere e installare il @microsoft/signalr
pacchetto npm.
npm init -y
npm install @microsoft/signalr
Nelle versioni ASP.NET il client JavaScript è stato ottenuto tramite un pacchetto NuGet in Visual Studio. Nelle versioni di ASP.NET Core il @aspnet/signalr
pacchetto npm contiene le librerie JavaScript. Questo pacchetto non è incluso nel modello applicazione Web principale di ASP.NET. Usare npm per ottenere e installare il @aspnet/signalr
pacchetto npm.
npm init -y
npm install @aspnet/signalr
jQuery
La dipendenza da jQuery è stata rimossa, ma i progetti possono comunque usare jQuery.
Supporto di Internet Explorer
ASP.NET Core SignalR non supporta Microsoft Internet Explorer, mentre ASP.NET SignalR supporta Microsoft Internet Explorer 8 o versione successiva. Per altre informazioni, vedere ASP.NET Piattaforme supportate da CoreSignalR.
Sintassi del metodo client JavaScript
La sintassi JavaScript è stata modificata rispetto alla versione ASP.NET di SignalR. Invece di usare l'oggetto $connection
, creare una connessione usando l'API HubConnectionBuilder .
const connection = new signalR.HubConnectionBuilder()
.withUrl("/hub")
.build();
Usare il metodo on per specificare i metodi client che l'hub può chiamare.
La sintassi JavaScript è stata modificata rispetto alla versione ASP.NET di SignalR. Invece di usare l'oggetto $connection
, creare una connessione usando l'API HubConnectionBuilder .
const connection = new signalR.HubConnectionBuilder()
.withUrl("/hub")
.build();
Usare il metodo on per specificare i metodi client che l'hub può chiamare.
connection.on("ReceiveMessage", (user, message) => {
const msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
const encodedMsg = `${user} says ${msg}`;
console.log(encodedMsg);
});
Dopo aver creato il metodo client, avviare la connessione hub. Concatenare un metodo catch per registrare o gestire gli errori.
connection.start().catch(err => console.error(err));
Proxy hub
I proxy hub non vengono più generati automaticamente. Il nome del metodo viene invece passato all'API invoke come stringa.
I proxy hub non vengono più generati automaticamente. Il nome del metodo viene invece passato all'API invoke come stringa.
.NET e altri client
Microsoft.AspNetCore.SignalR. Il pacchetto NuGet client contiene le librerie client .NET per ASP.NET CoreSignalR.
Usare per creare e compilare un'istanza HubConnectionBuilder di una connessione a un hub.
connection = new HubConnectionBuilder()
.WithUrl("url")
.Build();
Differenze di scalabilità orizzontale
SignalR ASP.NET supporta SQL Server e Redis. ASP.NET Core SignalR supporta Il servizio di Azure SignalR e Redis.
ASP.NET
- SignalRscaleout con bus di servizio di Azure
- SignalR scaleout con Redis
- SignalR scaleout con SQL Server