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
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Miglioramenti agli screen reader e al contrasto in Angular
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Migliora le tue soluzioni ASP.NET Core con Azure OpenAI
Evitare il flickering dei componenti nel prerender di Blazor 8
Reactive form tipizzati con FormBuilder in Angular
Eseguire attività basate su eventi con Azure Container Jobs
Eseguire le GitHub Actions offline
Utilizzare Model as a Service su Microsoft Azure
Utilizzare il trigger SQL con le Azure Function
Paginare i risultati con QuickGrid in Blazor
Utilizzare le collection expression in C#