Mise à l'échelle de SignalR avec SQL Server

par Patrick Fletcher

Avertissement

Cette documentation ne concerne pas la dernière version de SignalR. Regardez ASP.NET Core SignalR.

Versions logicielles utilisées dans cette rubrique

Versions précédentes de cette rubrique

Pour plus d’informations sur les versions antérieures de SignalR, consultez Les versions antérieures de SignalR.

Questions et commentaires

Veuillez laisser des commentaires sur la façon dont vous avez aimé ce tutoriel et 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 didacticiel, 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 dans 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 l’effet complet, 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.

Diagramme montrant les flèches allant de S Q L Server à V M aux ordinateurs. Une flèche étiquetée Update démarre à V M et accède au serveur S Q L.

Prerequisites

Microsoft SQL Server 2005 ou version ultérieure. Le backplane 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.)

Aperçu

Avant d’accéder au didacticiel détaillé, voici une vue d’ensemble rapide de ce que vous allez faire.

  1. Créez une base de données vide. Le backplane 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 à 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 backplan avec les valeurs par défaut pour TableCount et MaxQueueLength. Pour plus d’informations sur la modification de ces valeurs, consultez SignalR Performance : Scaleout Metrics.

Configurer la base de données

Déterminez si l’application utilisera l’authentification Windows ou l’authentification SQL Server pour accéder à la base de données. Indépendamment, 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 nouvelle base de données que le backplane utilisera. Vous pouvez donner à la base de données n’importe quel nom. Vous n’avez pas besoin de créer de tables dans la base de données ; la backplane créera les tables nécessaires.

Capture d’écran de la boîte de dialogue Explorateur d’objets. Le dossier intitulé Bases de données est sélectionné.

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 des mises à jour plus efficacement. (Toutefois, le plan arrière fonctionne également sans Service Broker.)

Pour vérifier 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 d’une fenêtre affichant l’affichage catalogue sys dot databases.

Pour activer Service Broker, utilisez la requête SQL suivante :

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Note

Si cette requête apparaît en blocage, 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 des tutoriels suivants :

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

Capture d’écran montrant la boîte de dialogue Ajouter des rôles et des fonctionnalités. Les rôles serveur et le protocole WebSocket sont sélectionnés.

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

Capture d’écran montrant la boîte de dialogue Ajouter des rôles et des fonctionnalités. Les rôles de serveur et le service de gestion sont sélectionnés.

Installez Web Deploy 3.0. Lorsque vous exécutez le Gestionnaire IIS, 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 avec Web Deploy 3 point 0 sélectionné dans les résultats de la recherche.

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 vous ne voyez pas le service de gestion web dans la liste des services Windows, vérifiez que vous avez 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 à partir de votre ordinateur de développement sur le serveur. Dans l’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 for 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’elles 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 deux fenêtres de navigateur ouvertes montrant l’application déployée sur deux serveurs.

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

Capture d’écran de la boîte de dialogue Explorateur d’objets affichant des dossiers et des fichiers.

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