Come abbiamo visto in un precedente articolo (https://www.aspitalia.com/articoli/asp.net-core3/web-ui-interattive-blazor-server.aspx), Blazor Server sfrutta una connessione SignalR per ricevere eventi dal browser e aggiornare il DOM della pagina. Questa architettura ha il vantaggio di funzionare anche con browser legacy, che magari non supportano ancora WebAssembly, ma presenta alcune difficoltà nello scalare il sistema su un gran numero di utenti, visto che il nostro server deve gestire un gran numero di connessioni WebSocket attive.
Una valida alternativa, se siamo su Azure, è quella di sfruttare Azure SignalR Service, di cui ci siamo occupati in questo script: https://www.windowsazureitalia.com/script/113/Scalare-Comunicazioni-Realtime-Azure-SignalR-Service.aspx
Per far sì che Blazor funzioni con questo servizio, dobbiamo innanzi tutto aggiungere il package NuGet Microsoft.Azure.SignalR:
Install-Package Microsoft.Azure.SignalR
A questo punto possiamo configurarlo nella classe di Startup:
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddServerSideBlazor(); services.AddSignalR().AddAzureSignalR(config => { config.ServerStickyMode = ServerStickyMode.Required; config.ConnectionString = "...connectionstring..."; }); services.AddSingleton<WeatherForecastService>(); }
Un aspetto da notare è l'impostazione di ServerStickyMode a Required: questa opzione fa sì che il server a cui vengono inviati i messaggi sia lo stesso con cui è avvenuta l'iniziale negotiation della connessione. Con Blazor è un parametro necessario nel caso in cui abbiamo diverse istanze di web server.
Una volta effettuati questi passaggi, se eseguiamo l'applicazione, vedremo che effettivamente il client si connetterà al servizio SignalR, come previsto:

Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestione degli stili CSS con le regole @layer
Creare una libreria CSS universale - Rotazione degli elementi
Ordine e importanza per @layer in CSS
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Disabilitare automaticamente un workflow di GitHub
Aggiornare a .NET 9 su Azure App Service
Usare le navigation property in QuickGrid di Blazor
Scrivere selettori CSS più semplici ed efficienti con :is()
Path addizionali per gli asset in ASP.NET Core MVC
Utilizzare il trigger SQL con le Azure Function
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Generare un hash con SHA-3 in .NET