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. Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Client
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. Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Client
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 versione successiva

Differenze tra le 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:

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. Connessione 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.

Stato

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 permanente Connessione ion

In ASP.NET Core SignalRla classe Persistent Connessione ion è 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. Anziché usare l'oggetto $connection , creare una connessione usando l'API Hub Connessione ionBuilder.

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. Anziché usare l'oggetto $connection , creare una connessione usando l'API Hub Connessione ionBuilder.

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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    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

ASP.NET Core

Risorse aggiuntive