Scale-out di SignalR con SQL Server (SignalR 1.x)

di Patrick Fletcher

Avviso

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

In questa esercitazione si userà SQL Server per distribuire i 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 del server S Q L e della relativa relazione tra V Ms, computer, invio di query e aggiornamenti al server S Q L.

Prerequisiti

Microsoft SQL Server 2005 o versione successiva. Il backplane supporta le edizioni desktop e server di SQL Server. Non supporta SQL Server Compact Edition o database di Azure SQL. 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 delle operazioni che verranno eseguite.

  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 Global.asax per configurare il backplane:

    protected void Application_Start()
    {
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

Configurare il database

Decidere se l'applicazione userà autenticazione di Windows o SQL Server'autenticazione per accedere al database. Indipendentemente da ciò, assicurarsi 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 Esplora oggetti con la cartella Database evidenziata, che mostra le relative sottocartelle contenute.

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 gli 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 vista del catalogo sys.databases .

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

Screenshot della scheda S Q L Query 1 punto S Q L visualizzata in Service Broker, che mostra le schede Risultati e Messaggi.

Per abilitare Service Broker, usare la query SQL seguente:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Nota

Se questa query sembra 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:

Successivamente, l'applicazione di chat verrà modificata per supportare lo scaleout con SQL Server. Aggiungere prima di tutto il pacchetto NuGet SignalR.SqlServer al progetto. In Visual Studio scegliere Gestione pacchetti NuGet dal menu Strumenti e quindi console di Gestione pacchetti. Nella finestra Console di gestione pacchetti immettere il comando seguente:

Install-Package Microsoft.AspNet.SignalR.SqlServer

Aprire quindi il file Global.asax. Aggiungere il codice seguente al metodo Application_Start :

protected void Application_Start()
{
    string sqlConnectionString = "<add your SQL connection string here>";
    GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);

    RouteTable.Routes.MapHubs();
}

Distribuire ed eseguire l'applicazione

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

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

Screenshot della schermata Aggiunta guidata ruoli e funzionalità con le opzioni Ruoli server e Protocollo Web Socket evidenziate.

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

Screenshot della schermata Aggiungi ruoli e funzionalità guidata con le opzioni Ruoli del server e I S Management Scripts and Tools evidenziate.

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 della schermata Web Platform Installer 4 punto 5 che mostra i risultati della ricerca con l'opzione Distribuzione Web 3 punti 0 evidenziata.

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

Aprire infine 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 Web Deployment Content Map for Visual Studio e ASP.NET.

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

Screenshot della finestra del browser Internet Explorer che mostra la schermata Indice che visualizza i messaggi Signal R.

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

Screenshot della schermata Esplora oggetti con il server MIKE dash S Q L evidenziato e che mostra le cartelle e i server contenuti.

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