Seleziona una pagina

La nuova versione di ASP.NET Core SignalR non è compatibile sia per la parte Server che per la parte Client alla versione precedente ASP.NET SignalR.

Principali Differenze tra le librerie

La seguente tabella sintetizza le principali differenze per sviluppare un’applicazione web che supporti SignalR:



ASP.NET SignalR ASP.NET Core SignalR
Pacchetto Server NuGet Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core)
Microsoft.AspNetCore.SignalR (.NET Framework)
Pacchetto Client NuGet Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
Pacchetto Client npm signalr @aspnet/signalr
Tipo Applicazione Server ASP.NET (System.Web) or OWIN Self-Host ASP.NET Core
Piattaforme Server Supportate .NET Framework 4.5 or later .NET Framework 4.6.1 or later

.NET Core 2.1 or later

 

Feature Differenti

Riconnessioni automatiche

La nuova versione ASP.NET Core SignalR, a diferenza della precedente non supporta la riconnessione automatica del client nel caso in cui la connessione sia stata interrotta.

Utilizzando ASP.NET Core SignalR sarà necessario che l’utente si riconnetti manualmente.

Protocolli Supportati

ASP.NET Core SignalR supporta JSON e MessagePack (serializzazione binaria che crea dei messaggi più piccoli rispetto al JSON), inoltre è possibile estendere la libreria aggiungendo altri protocolli Custom.

Differenze Lato Server

Configurazione

Le librerie di ASP.NET Core SignalR sono incluse nel Metapacchetto Microsoft.AspNetCore.App, il nuovo metapacchetto che nella versione ASP.NET Core 2.1, sostituisce il metapacchetto Microsoft.AspNetCore.All  che era stato introdotto nella versione ASP.NET Core 2.0.

Poichè il metapacchetto Microsoft.AspNetCore.App  è presente di default nei template dei nuovi progetti Web ASP.NET Core 2.1, per aggiungere le funzionalità di SignalR al nostro progetto, basterà configurare opportunamente il file Startup.cs:

1) Aggiungere il relativo middleware alla pipeline di ASP.NET Core

public void ConfigureServices(IServiceCollection services)
{
    services.Configure(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddSignalR();

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

2) Configurare le routes per i puntamenti agli Hub SignalR:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

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

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

Differenze Lato Client

Typescript

La nuova libreria ASP.NET Core SignalR Client è stata totalmente riscritta in Typescript. Questo permette di poter utilizzare oltre al Javascript anche Typescript quando si utilizza la libreria Client Javascript

Host pacchetto libreria Client.

La versione ASP.NET SignalR prevedeva di poter scaricare la libreria Client Javascript direttamente con il pacchetto nuget Microsoft.AspNet.SignalR.Client, la nuova libreria non è più un pacchetto nuget ma è hostata su npm. Quindi per scaricare il pacchetto dal server npm è ora necessario eseguire il seguente comando:

npm init -y
npm install @aspnet/signalr

Una volta terminato il download sarà possibile prendere le dll da aggiungere al progetto nella cartella: node_modules\@aspnet\signalr\dist\browser.

JQuery

Nella nuova versione ASP.NET Core SignalR non è più necessario includere la libreria JQuery in quanto sono state tolte tutte le dipendenze.

Nuova Sintassi Connessione Hub

La sintassi per effettuare la connessione all’Hub desiderato, è stata modificata, di seguito la differenza tra le due versioni:

Versione ASP.NET SignalR

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('chatHub');
contosoChatHubProxy.on('sendMesage, function(name, message) {
    console.log(name + ' ' + message);
});
connection.start().done(function() {
  ...
    });

Versione ASP.NET SignalR Core

var connection = new signalR.HubConnectionBuilder()
                            .withUrl('/chat')
                            .build();
bindConnectionMessage(connection);
connection.start()
    .then(function () {
        onConnected(connection);
    })
    .catch(function (error) {
        console.error(error.message);
    });

 

Scalabilità

La versione per ASP.NET supporta:

Mentre la versione per ASP.NET Core supporta:

 

That’s all!

Happy Coding Winking smile

Sono uno sviluppatore specializzato nella realizzazione di applicazioni web ASP.NET. Mi ritengo una persona fortunata perchè il mio lavoro coincide con la mia passione: Sviluppare codice!!! Ho incominciato a sviluppare codice dall’età di circa dieci anni con il famigerato Commodore 64. La mia svolta epocale è stato l’avvento di internet e dal 1995 ho cominciato a sviluppare siti web prima statici e poi dinamici (ASP) per poi approdare alla piattaforma .NET, da allora… non mi sono piu’ fermato!