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
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Filtering sulle colonne in una QuickGrid di Blazor
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Migliora la resilienza delle applicazioni con .NET e Azure Container Apps
Gestire i dati con Azure Cosmos DB Data Explorer
Testare l'invio dei messaggi con Event Hubs Data Explorer
Potenziare Azure AI Search con la ricerca vettoriale
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Generare velocemente pagine CRUD in Blazor con QuickGrid
Migliorare l'organizzazione delle risorse con Azure Policy
What's new in Azure Functions and Extensions
Creazione di componenti personalizzati in React.js con Tailwind CSS