Scale-out di SignalR con SQL Server
Avviso
Questa documentazione non è per la versione più recente di SignalR. Esaminare ASP.NET Core SignalR.
Versioni software usate in questo argomento
- Visual Studio 2013
- .NET 4.5
- SignalR versione 2
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.
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à.
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 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.
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]
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.
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 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.
Dopo aver eseguito l'applicazione, è possibile notare che SignalR ha creato automaticamente tabelle nel database:
SignalR gestisce le tabelle. Se l'applicazione viene distribuita, non eliminare righe, modificare la tabella e così via.