Scale-out de SignalR avec SQL Server
par Patrick Fletcher
Avertissement
Cette documentation ne concerne pas la dernière version de SignalR. Consultez ASP.NET Core SignalR.
Versions logicielles utilisées dans cette rubrique
- Visual Studio 2013
- .NET 4.5
- SignalR version 2
Versions précédentes de cette rubrique
Pour plus d’informations sur les versions antérieures de SignalR, consultez Anciennes versions de SignalR.
Questions et commentaires
Laissez vos commentaires sur la façon dont vous avez aimé ce tutoriel et sur ce que nous pourrions améliorer dans les commentaires en bas de la page. Si vous avez des questions qui ne sont pas directement liées au tutoriel, vous pouvez les publier sur le forum ASP.NET SignalR ou StackOverflow.com.
Dans ce tutoriel, vous allez utiliser SQL Server pour distribuer des messages sur une application SignalR déployée dans deux instances IIS distinctes. Vous pouvez également exécuter ce tutoriel sur une seule machine de test, mais pour obtenir le plein effet, vous devez déployer l’application SignalR sur deux serveurs ou plus. Vous devez également installer SQL Server sur l’un des serveurs ou sur un serveur dédié distinct. Une autre option consiste à exécuter le didacticiel à l’aide de machines virtuelles sur Azure.
Prérequis
Microsoft SQL Server 2005 ou version ultérieure. Le fond de panier prend en charge les éditions de bureau et de serveur de SQL Server. Il ne prend pas en charge SQL Server Compact Edition ou Azure SQL Database. (Si votre application est hébergée sur Azure, envisagez plutôt le backplane Service Bus.)
Vue d’ensemble
Avant d’accéder au tutoriel détaillé, voici une vue d’ensemble rapide de ce que vous allez faire.
Créez une base de données vide. Le fond de panier crée les tables nécessaires dans cette base de données.
Ajoutez ces packages NuGet à votre application :
Créez une application SignalR.
Ajoutez le code suivant à Startup.cs pour configurer le 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(); } }
Ce code configure le backplane avec les valeurs par défaut pour TableCount et MaxQueueLength. Pour plus d’informations sur la modification de ces valeurs, consultez Performances de SignalR : Scaleout Metrics.
Configurer la base de données
Déterminez si l’application utilisera l’authentification Authentification Windows ou SQL Server pour accéder à la base de données. Quoi qu’il en soit, assurez-vous que l’utilisateur de base de données dispose des autorisations nécessaires pour se connecter, créer des schémas et créer des tables.
Créez une base de données que le backplane doit utiliser. Vous pouvez donner n’importe quel nom à la base de données. Vous n’avez pas besoin de créer de tables dans la base de données ; le fond de panier crée les tables nécessaires.
Activer Service Broker
Il est recommandé d’activer Service Broker pour la base de données de backplane. Service Broker fournit une prise en charge native de la messagerie et de la mise en file d’attente dans SQL Server, ce qui permet au backplane de recevoir les mises à jour plus efficacement. (Toutefois, le fond de panier fonctionne également sans Service Broker.)
Pour case activée si Service Broker est activé, interrogez la colonne is_broker_enabled dans la vue catalogue sys.databases.
SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]
Pour activer Service Broker, utilisez la requête SQL suivante :
ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER
Notes
Si cette requête semble être bloquée, vérifiez qu’aucune application n’est connectée à la base de données.
Si vous avez activé le suivi, les traces indiquent également si Service Broker est activé.
Créer une application SignalR
Créez une application SignalR en suivant l’un de ces tutoriels :
Ensuite, nous allons modifier l’application de conversation pour prendre en charge le scaleout avec SQL Server. Tout d’abord, ajoutez le package NuGet SignalR.SqlServer à votre projet. Dans Visual Studio, dans le menu Outils , sélectionnez Gestionnaire de package NuGet, puis console du gestionnaire de package. Dans la fenêtre Console du Gestionnaire de package, entrez la commande suivante :
Install-Package Microsoft.AspNet.SignalR.SqlServer
Ensuite, ouvrez le fichier Startup.cs. Ajoutez le code suivant à la méthode 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();
}
}
Déployer et exécuter l’application
Préparez vos instances Windows Server pour déployer l’application SignalR.
Ajoutez le rôle IIS. Incluez les fonctionnalités de développement d’applications, notamment le protocole WebSocket.
Incluez également le service de gestion (répertorié sous « Outils d’administration »).
Installez Web Deploy 3.0. Lorsque vous exécutez le Gestionnaire des services Internet, il vous invite à installer Microsoft Web Platform, ou vous pouvez télécharger le programme d’installation. Dans le programme d’installation de plateforme, recherchez Web Deploy et installez Web Deploy 3.0
Vérifiez que le service de gestion web est en cours d’exécution. Si ce n’est pas le cas, démarrez le service. (Si le service de gestion web ne figure pas dans la liste des services Windows, assurez-vous d’avoir installé le service de gestion lorsque vous avez ajouté le rôle IIS.)
Enfin, ouvrez le port 8172 pour TCP. Il s’agit du port utilisé par l’outil Web Deploy.
Vous êtes maintenant prêt à déployer le projet Visual Studio de votre ordinateur de développement sur le serveur. Dans Explorateur de solutions, cliquez avec le bouton droit sur la solution, puis cliquez sur Publier.
Pour obtenir une documentation plus détaillée sur le déploiement web, consultez Web Deployment Content Map pour Visual Studio et ASP.NET.
Si vous déployez l’application sur deux serveurs, vous pouvez ouvrir chaque instance dans une fenêtre de navigateur distincte et voir qu’ils reçoivent chacun des messages SignalR de l’autre. (Bien sûr, dans un environnement de production, les deux serveurs se trouvent derrière un équilibreur de charge.)
Après avoir exécuté l’application, vous pouvez voir que SignalR a créé automatiquement des tables dans la base de données :
SignalR gère les tables. Tant que votre application est déployée, ne supprimez pas de lignes, ne modifiez pas la table, etc.