Share via


Scale-out di SignalR con SQL Server

di Patrick Fletcher

Avviso

Questa documentazione non è per la versione più recente di SignalR. Esaminare ASP.NET Core SignalR.

Versioni software usate in questo argomento

Versioni precedenti di questo argomento

Per informazioni sulle versioni precedenti di SignalR, vedere Versioni precedenti di SignalR.

Domande e commenti

Lasciare commenti e suggerimenti su come è piaciuta questa esercitazione e ciò che è possibile migliorare nei commenti nella parte inferiore della pagina. Se si hanno domande che non sono direttamente correlate all'esercitazione, è possibile pubblicarli nel forum ASP.NET SignalR o StackOverflow.com.

In questa esercitazione si userà SQL Server per distribuire messaggi in un'applicazione SignalR distribuita in due istanze IIS separate. È anche possibile eseguire questa esercitazione in un singolo computer di test, ma per ottenere l'effetto completo, è necessario distribuire l'applicazione SignalR in due o più server. È anche necessario installare SQL Server in uno dei server o in un server dedicato separato. Un'altra opzione consiste nell'eseguire l'esercitazione usando macchine virtuali in Azure.

Diagramma che mostra le frecce che passano da S Q L Server a V M ai computer. Una freccia con etichetta Update inizia a V M e passa a S Q L Server.

Prerequisiti

Microsoft SQL Server 2005 o versione successiva. Il backplane supporta sia le edizioni desktop che server di SQL Server. Non supporta SQL Server Compact Edition o Azure SQL Database. Se l'applicazione è ospitata in Azure, prendere in considerazione il backplane del bus di servizio.

Panoramica

Prima di passare all'esercitazione dettagliata, ecco una rapida panoramica di ciò che si farà.

  1. Creare un nuovo database vuoto. Il backplane creerà le tabelle necessarie in questo database.

  2. Aggiungere questi pacchetti NuGet all'applicazione:

  3. Creare un'applicazione SignalR.

  4. Aggiungere il codice seguente a Startup.cs per configurare il backplane:

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            string sqlConnectionString = "Connecton string to your SQL DB";
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
            app.MapSignalR();
        }
    }
    

    Questo codice configura il backplane con i valori predefiniti per TableCount e MaxQueueLength. Per informazioni sulla modifica di questi valori, vedere Prestazioni SignalR: Metriche scaleout.

Configurare il database

Decidere se l'applicazione userà autenticazione di Windows o SQL Server autenticazione per accedere al database. Indipendentemente dal fatto che l'utente del database disponga delle autorizzazioni per accedere, creare schemi e creare tabelle.

Creare un nuovo database per il backplane da usare. È possibile assegnare al database qualsiasi nome. Non è necessario creare tabelle nel database; il backplane creerà le tabelle necessarie.

Screenshot della finestra di dialogo Esplora oggetti. È selezionata la cartella Database con etichetta.

Abilitare Service Broker

È consigliabile abilitare Service Broker per il database backplane. Service Broker offre supporto nativo per la messaggistica e l'accodamento in SQL Server, che consente al backplane di ricevere aggiornamenti in modo più efficiente. Tuttavia, il backplane funziona anche senza Service Broker.

Per verificare se Service Broker è abilitato, eseguire una query sulla colonna is_broker_enabled nella visualizzazione del catalogo sys.database .

SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]

Screenshot di una finestra che mostra la visualizzazione del catalogo dei database sys dot.

Per abilitare Service Broker, usare la query SQL seguente:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Nota

Se questa query viene visualizzata come deadlock, assicurarsi che non siano presenti applicazioni connesse al database.

Se è stata abilitata la traccia, le tracce mostreranno anche se Service Broker è abilitato.

Creare un'applicazione SignalR

Creare un'applicazione SignalR seguendo una di queste esercitazioni:

Verrà quindi modificata l'applicazione chat per supportare il scaleout con SQL Server. Aggiungere innanzitutto il pacchetto NuGet SignalR.SqlServer al progetto. In Visual Studio, dal menu Strumenti selezionare Gestione pacchetti NuGet, quindi selezionare Console di Gestione pacchetti. Nella finestra Console di gestione pacchetti immettere il comando seguente:

Install-Package Microsoft.AspNet.SignalR.SqlServer

Aprire quindi il file Startup.cs. Aggiungere il codice seguente al metodo Configure:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
        app.MapSignalR();
    }
}

Distribuire ed eseguire l'applicazione

Preparare le istanze di Windows Server per distribuire l'applicazione SignalR.

Aggiungere il ruolo IIS. Includere le funzionalità "Sviluppo applicazioni", incluso il protocollo WebSocket.

Screenshot che mostra la finestra di dialogo Aggiungi ruoli e funzionalità guidata. Vengono selezionati ruoli server e Protocollo WebSocket.

Includere anche il servizio di gestione (elencato in "Strumenti di gestione").

Screenshot che mostra la finestra di dialogo Aggiungi ruoli e funzionalità guidata. I ruoli server e il servizio di gestione sono selezionati.

Installare Distribuzione Web 3.0. Quando si esegue Gestione IIS, verrà richiesto di installare Piattaforma Web Microsoft oppure scaricare il programma di installazione. Nel programma di installazione della piattaforma cercare Distribuzione Web e installare Distribuzione Web 3.0

Screenshot con la distribuzione Web di 3 punti 0 selezionati nei risultati della ricerca.

Verificare che il servizio gestione Web sia in esecuzione. In caso contrario, avviare il servizio. Se non viene visualizzato il servizio gestione Web nell'elenco dei servizi Windows, assicurarsi di aver installato il servizio di gestione quando è stato aggiunto il ruolo IIS.

Infine, aprire la porta 8172 per TCP. Si tratta della porta usata dallo strumento Distribuzione Web.

A questo momento è possibile distribuire il progetto di Visual Studio dal computer di sviluppo al server. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione e scegliere Pubblica.

Per una documentazione più dettagliata sulla distribuzione Web, vedere Mappa contenuto distribuzione Web per Visual Studio e ASP.NET.

Se si distribuisce l'applicazione in due server, è possibile aprire ogni istanza in una finestra del browser separata e vedere che ogni utente riceve messaggi SignalR dall'altro. Naturalmente, in un ambiente di produzione, i due server si trovano dietro un servizio di bilanciamento del carico.

Screenshot di due finestre del browser aperte che mostrano l'applicazione distribuita in due server.

Dopo aver eseguito l'applicazione, è possibile notare che SignalR ha creato automaticamente tabelle nel database:

Screenshot della finestra di dialogo Esplora oggetti che visualizza cartelle e file.

SignalR gestisce le tabelle. Se l'applicazione viene distribuita, non eliminare righe, modificare la tabella e così via.