Scale-out de SignalR avec SQL Server (SignalR 1.x)

par Patrick Fletcher

Avertissement

Cette documentation ne concerne pas la dernière version de SignalR. Jetez un coup d’œil à ASP.NET Core SignalR.

Dans ce tutoriel, vous allez utiliser SQL Server pour distribuer des messages entre une application SignalR déployée dans deux instances IIS distinctes. Vous pouvez également exécuter ce didacticiel 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 tutoriel à l’aide de machines virtuelles sur Azure.

Diagramme du serveur SQL et de sa relation entre les ms virtuelles, les ordinateurs, l’envoi de requêtes et les mises à jour au serveur QL.

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 fond de panier 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.

  1. Créez une base de données vide. Le fond de panier crée les tables nécessaires dans cette base de données.

  2. Ajoutez ces packages NuGet à votre application :

  3. Créez une application SignalR.

  4. Ajoutez le code suivant à Global.asax pour configurer le fond de panier :

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

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 la 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 fond de panier 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.

Capture d’écran de la fenêtre Explorateur d'objets avec le dossier Bases de données mis en surbrillance, révélant ses sous-dossiers contenus.

Activer Service Broker

Il est recommandé d’activer Service Broker pour la base de données de fond de panier. 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 fond de panier 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 l’affichage catalogue sys.databases.

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

Capture d’écran de l’onglet Requête QS 1 point S Q L affiché dans Service Broker, montrant les onglets Résultats et Messages.

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 didacticiels :

Ensuite, nous allons modifier l’application de conversation pour prendre en charge le scale-out 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 Global.asax. Ajoutez le code suivant à la méthode Application_Start :

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

    RouteTable.Routes.MapHubs();
}

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 « Développement d’applications », notamment le protocole WebSocket.

Capture d’écran de l’écran De l’Assistant Ajout de rôles et de fonctionnalités avec les options Rôles serveur et Web Socket Protocol mises en évidence.

Incluez également le service de gestion (répertorié sous « Outils de gestion »).

Capture d’écran de l’écran Ajouter des rôles et des fonctionnalités de l’Assistant avec les options Rôles serveur et Scripts et outils de gestion des IS mises en évidence.

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.

Capture d’écran de l’écran Web Platform Installer 4 point 5 affichant les résultats de la recherche avec l’option Web Deploy 3 point 0 mise en surbrillance.

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 n’apparaît 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.)

Capture d’écran de la fenêtre du navigateur Internet Explorer montrant l’écran Index qui affiche les messages Signal R.

Après avoir exécuté l’application, vous pouvez voir que SignalR a automatiquement créé des tables dans la base de données :

Capture d’écran de l’écran Explorateur d'objets avec le serveur QL de tableau de bord MIKE mis en surbrillance et montrant ses dossiers et serveurs contenus.

SignalR gère les tables. Tant que votre application est déployée, ne supprimez pas de lignes, ne modifiez pas la table, etc.