Scale-out de SignalR avec Azure Service Bus
par Patrick Fletcher
Avertissement
Cette documentation ne concerne pas la dernière version de SignalR. Consultez ASP.NET Core SignalR.
Dans ce tutoriel, vous allez déployer une application SignalR sur un rôle Web Windows Azure, à l’aide du backplane Service Bus pour distribuer des messages à chaque rôle instance. (Vous pouvez également utiliser le fond de panier Service Bus avec des applications web dans Azure App Service.)
Configuration requise :
- Un compte Azure Windows.
- Kit de développement logiciel (SDK) Windows Azure.
- Visual Studio 2012 ou 2013.
Le fond de panier Service Bus est également compatible avec Service Bus pour Windows Server, version 1.1. Toutefois, il n’est pas compatible avec la version 1.0 de Service Bus pour Windows Server.
Tarifs
Le fond de panier Service Bus utilise des rubriques pour envoyer des messages. Pour obtenir les informations tarifaires les plus récentes, consultez Service Bus. Au moment de la rédaction du présent article, vous pouvez envoyer 1 000 000 messages par mois pour moins de 1 $. Le backplane envoie un message Service Bus pour chaque appel d’une méthode de hub SignalR. Il existe également des messages de contrôle pour les connexions, les déconnexions, la jonction ou la sortie de groupes, etc. Dans la plupart des applications, la majorité du trafic de messages sera des appels de méthode hub.
Vue d’ensemble
Avant d’accéder au tutoriel détaillé, voici une vue d’ensemble rapide de ce que vous allez faire.
Utilisez le Portail Azure Windows pour créer un espace de noms Service Bus.
Ajoutez ces packages NuGet à votre application :
Créez une application SignalR.
Ajoutez le code suivant à Startup.cs pour configurer le backplane :
public void Configuration(IAppBuilder app) { string connectionString = "Service Bus connection string"; GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName"); app.MapSignalR(); // ... }
Ce code configure le backplane avec les valeurs par défaut pour TopicCount et MaxQueueLength. Pour plus d’informations sur la modification de ces valeurs, consultez Performances de SignalR : Scaleout Metrics.
Pour chaque application, choisissez une valeur différente pour « YourAppName ». N’utilisez pas la même valeur dans plusieurs applications.
Créer les services Azure
Créez un service cloud, comme décrit dans Création et déploiement d’un service cloud. Suivez les étapes de la section « Procédure : créer un service cloud à l’aide de la création rapide ». Pour ce tutoriel, vous n’avez pas besoin de charger un certificat.
Créez un espace de noms Service Bus, comme décrit dans Rubriques/abonnements Service Bus. Suivez les étapes de la section « Créer un espace de noms de service ».
Notes
Veillez à sélectionner la même région pour le service cloud et l’espace de noms Service Bus.
Créer le projet Visual Studio
Démarrez Visual Studio. Dans le menu Fichier, cliquez sur Nouveau projet.
Dans la boîte de dialogue Nouveau projet , développez Visual C#. Sous Modèles installés, sélectionnez Cloud , puis Windows Azure Cloud Service. Conservez le .NET Framework 4.5 par défaut. Nommez l’application ChatService et cliquez sur OK.
Dans la boîte de dialogue Nouveau service cloud Azure Windows , sélectionnez ASP.NET rôle web. Cliquez sur le bouton flèche droite (>) pour ajouter le rôle à votre solution.
Pointez la souris sur le nouveau rôle, afin que l’icône de crayon soit visible. Cliquez sur cette icône pour renommer le rôle. Nommez le rôle « SignalRChat », puis cliquez sur OK.
Dans la boîte de dialogue Nouveau projet ASP.NET , sélectionnez MVC, puis cliquez sur OK.
L’Assistant Projet crée deux projets :
- ChatService : ce projet est l’application Windows Azure. Il définit les rôles Azure et d’autres options de configuration.
- SignalRChat : ce projet est votre ASP.NET projet MVC 5.
Créer l’application SignalR Chat
Pour créer l’application de conversation, suivez les étapes du tutoriel Prise en main avec SignalR et MVC 5.
Utilisez NuGet pour installer les bibliothèques requises. 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 les commandes suivantes :
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus
Utilisez l’option -ProjectName
pour installer les packages sur le ASP.NET projet MVC, plutôt que sur le projet Azure Windows.
Configurer le backplane
Dans le fichier Startup.cs de votre application, ajoutez le code suivant :
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
string connectionString = "";
GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");
app.MapSignalR();
}
Vous devez maintenant obtenir votre chaîne de connexion Service Bus. Dans le Portail Azure, sélectionnez l’espace de noms Service Bus que vous avez créé, puis cliquez sur l’icône Clé d’accès.
Copiez la chaîne de connexion dans le Presse-papiers, puis collez-la dans la variable connectionString .
string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";
Déployer sur Azure
Dans Explorateur de solutions, développez le dossier Rôles à l’intérieur du projet ChatService.
Cliquez avec le bouton droit sur le rôle SignalRChat et sélectionnez Propriétés. Sélectionnez l’onglet Configuration . Sous Instances, sélectionnez 2. Vous pouvez également définir la taille de la machine virtuelle sur Extra Small.
Enregistrez les modifications.
Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet ChatService. Sélectionnez Publier.
S’il s’agit de votre première publication dans Windows Azure, vous devez télécharger vos informations d’identification. Dans l’Assistant Publication , cliquez sur « Se connecter pour télécharger les informations d’identification ». Cela vous invite à vous connecter au Portail Azure Windows et à télécharger un fichier de paramètres de publication.
Cliquez sur Importer et sélectionnez le fichier de paramètres de publication que vous avez téléchargé.
Cliquez sur Suivant. Dans la boîte de dialogue Paramètres de publication, sous Service cloud, sélectionnez le service cloud que vous avez créé précédemment.
Cliquez sur Publier. Le déploiement de l’application et le démarrage des machines virtuelles peuvent prendre quelques minutes.
Maintenant, lorsque vous exécutez l’application de conversation, les instances de rôle communiquent via Azure Service Bus, à l’aide d’une rubrique Service Bus. Une rubrique est une file d’attente de messages qui autorise plusieurs abonnés.
Le fond de panier crée automatiquement la rubrique et les abonnements. Pour afficher les abonnements et l’activité des messages, ouvrez le Portail Azure, sélectionnez l’espace de noms Service Bus, puis cliquez sur « Rubriques ».
L’affichage de l’activité de message dans le tableau de bord prend quelques minutes.
SignalR gère la durée de vie de la rubrique. Tant que votre application est déployée, n’essayez pas de supprimer manuellement des rubriques ou de modifier les paramètres de la rubrique.
Dépannage
System.InvalidOperationException « Le seul IsolationLevel pris en charge est 'IsolationLevel.Serializable'. »
Cette erreur peut se produire si le niveau de transaction d’une opération est défini sur autre chose que Serializable
. Vérifiez qu’aucune opération n’est effectuée avec d’autres niveaux de transaction.