Scale-out di SignalR con SQL Server (SignalR 1.x)
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.
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.
Creare un nuovo database vuoto. Il backplane creerà le tabelle necessarie in questo database.
Aggiungere questi pacchetti NuGet all'applicazione:
Creare un'applicazione SignalR.
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.
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]
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.
Includere anche il servizio di gestione (elencato in "Strumenti di gestione").
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
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.
Dopo aver eseguito l'applicazione, è possibile vedere che SignalR ha creato automaticamente le tabelle nel database:
SignalR gestisce le tabelle. Se l'applicazione viene distribuita, non eliminare righe, modificare la tabella e così via.