Personnalisation du cycle de vie d'un rôle Web ou de travail dans .NET
Important
Cloud Services (classique) est désormais déconseillé pour tous les clients depuis le 1er septembre 2024. Tous les déploiements existants en cours d’exécution seront arrêtés par Microsoft, et les données seront définitivement perdues à partir d’octobre 2024. Les nouveaux déploiements doivent utiliser le nouveau modèle de déploiement basé sur Azure Resource Manager Azure Cloud Services (support étendu) .
Quand vous créez un rôle Worker, vous étendez la classe RoleEntryPoint, qui fournit des méthodes à substituer, ce qui vous permet de répondre aux événements de cycle de vie. Pour les rôles Web, cette classe est facultative. Vous devez donc l’utiliser pour répondre aux événements de cycle de vie.
Extension de la classe RoleEntryPoint
La classe RoleEntryPoint inclut des méthodes qui sont appelées par Azure lorsqu’il démarre, exécute ou arrête un rôle web ou de travail. Vous pouvez éventuellement substituer ces méthodes pour gérer l’initialisation des rôles, les séquences d’arrêt des rôles ou le thread d’exécution du rôle.
Lors de l'extension de RoleEntryPoint, vous devez tenir compte des comportements de méthodes suivants :
La méthode OnStart retourne une valeur booléenne. Il est donc possible de retourner false à partir de cette méthode.
Si votre code retourne la valeur false, le processus de rôle se termine soudainement, sans exécuter de séquence d'arrêt. En général, vous devez éviter de retourner la valeur false à partir de la méthode OnStart.
Une exception non interceptée dans la surcharge d'une méthode RoleEntryPoint est traitée comme une exception non gérée.
Si une exception se produit dans l’une des méthodes de cycle de vie, Azure déclenche l’événement UnhandledException, et le processus prend fin. Une fois votre rôle hors connexion, Azure le redémarre. Quand une exception non prise en charge se produit, l’événement Stopping n’est pas déclenché, et la méthode OnStop n’est pas appelée.
Si votre rôle ne démarre pas, ou s’il est recyclé entre les états d’initialisation, d’occupation et d’arrêt, votre code lève peut-être une exception non prise en charge dans l’un des événements de cycle de vie à chaque redémarrage du rôle. Utilisez, dans ce cas, l’événement UnhandledException pour déterminer la cause de l'exception et la gérer correctement. Votre rôle peut également être retourné depuis la méthode Run , ce qui entraîne ainsi son redémarrage. Pour plus d'informations sur les états de déploiement, consultez la rubrique Problèmes courants qui entraînent le recyclage des rôles.
Notes
Si vous utilisez Azure Tools pour Microsoft Visual Studio pour développer votre application, les modèles de projet de rôle étendent automatiquement la classe RoleEntryPoint pour vous dans les fichiers WebRole.cs et WorkerRole.cs.
Méthode OnStart
La méthode OnStart est appelée une fois votre instance de rôle mise en ligne par Azure. Pendant l’exécution du code OnStart, l’instance de rôle est marquée comme Occupée, et l’équilibreur de charge ne dirige aucun trafic externe vers celle-ci. Vous pouvez substituer cette méthode pour exécuter des tâches d'initialisation, telles que l'implémentation de gestionnaires d'événements et le démarrage de Diagnostics Azure.
Si OnStart retourne la valeur true, l’instance est initialisée correctement et Azure appelle la méthode RoleEntryPoint.Run. Si OnStart retourne la valeur false, le rôle prend fin immédiatement, sans exécuter de séquence d’arrêt planifié.
L'exemple de code suivant montre comment substituer la méthode OnStart . Cette méthode configure et démarre un moniteur de diagnostic lorsque l'instance de rôle démarre et définit un transfert de données de journalisation vers un compte de stockage :
public override bool OnStart()
{
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Error;
config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);
DiagnosticMonitor.Start("DiagnosticsConnectionString", config);
return true;
}
Méthode OnStop
La méthode OnStop est appelée une fois qu’Azure a mis une instance de rôle hors connexion, et avant la fin du processus. Vous pouvez substituer cette méthode pour appeler le code requis qui vous permet d’arrêter correctement votre instance de rôle.
Important
L’exécution du code dans la méthode OnStop est limitée dans le temps lorsqu’il est appelé pour des raisons autres qu'un arrêt initié par l'utilisateur. Une fois ce délai écoulé, le processus est terminé ; vous devez donc veiller à ce que le code de la méthode OnStop puisse s'exécuter rapidement ou qu’il accepte de ne pas être exécuté jusqu’à la fin. La méthode OnStop est appelée une fois l’événement Stopping déclenché.
Méthode Run
Vous pouvez substituer la méthode Run pour implémenter un thread de longue durée à votre instance de rôle.
La substitution de la méthode Run n’est pas obligatoire. L’implémentation par défaut démarre un thread qui reste inactif indéfiniment. Si vous substituez la méthode Run , votre code se bloquera indéfiniment. Si la méthode Run est retournée, le rôle est automatiquement recyclé. En d’autres termes, Azure déclenche l’événement Stopping, et appelle la méthode OnStop pour permettre l’exécution de vos séquences d’arrêt avant la mise hors connexion du rôle.
Implémentation des méthodes de cycle de vie ASP.NET pour un rôle Web
Vous pouvez utiliser les méthodes de cycle de vie ASP.NET, en plus de celles fournies par la classe RoleEntryPoint, pour gérer les séquences d’initialisation et d’arrêt d’un rôle Web. Cette approche peut être utile à des fins de compatibilité, si vous portez une application ASP.NET existante vers Azure. Les méthodes de cycle de vie ASP.NET sont appelées depuis les méthodes RoleEntryPoint . La méthode Application_Start est appelée après la méthode RoleEntryPoint.OnStart. La méthode Application_End est appelée avant la méthode RoleEntryPoint.OnStop.
Étapes suivantes
Découvrez comment créer un package de service cloud.