Après quel type d'exceptions / Crashes une instance ne Azure cloud effectuer redémarre?
Question
Pour autant que je me rappelle, une instance de rôle doit effectuer automatiquement un redémarrage après un accident / panne. Afin de tester ce comportement, je l'ai écrit une application qui applique un hors-mémoire exception et ma demande écrasements. L'instance de rôle n'a pas effectué un redémarrage, car il était encore en cours d'exécution et ok -. L'instance juste restartet le moteur d'exécution .NET
Je suis en train de savoir comment une instance réagit sur les erreurs différentes. Dans mon cas, un redémarrage n'a pas été nécessaire. Quel type d'erreurs / exceptions (que je peux appliquer) entraînerait un redémarrage complet d'une instance? Quel type d'erreurs / exceptions tueraient une instance pour toujours?
La solution
La seule raison qui provoque une instance de rôle à recycler (redémarré) est lorsque le méthode Run de RoleEntryPoint sorties. Cela se produit généralement lorsque vous:
- Run ( ) méthode et
- Avoir une exception non gérée dans votre code de programme, qui causerait la Run () méthode de sortie
Votre rôle serait toutefois recycler, mais plutôt se bloquer, lorsque vous avez activé la collection IntelliTrace.
Le modèle par défaut pour un WebRole ne remplace pas
UPDATE 1 (acording commenter 1) Non seulement une erreur, mais ce genre d'erreur (à savoir une exception non gérée), ce qui provoque la méthode Run () pour quitter. De plus, vous ne pouvez pas passer outre la course () dans votre WebRole, becasue votre RoleEntryPoint descendat vie dans les différents domaines d'application (même processus différent), votre application web (il aura aucune idée sur les exceptions de votre application). En savoir plus sur IIS complète d'hébergement et de processus ici . Ainsi, pour un rôle Web que vous avez juste une application Web dans IIS 7.0 fonctionnalités entièrement / 7.5, qui n'a aucune idée que cette IIS fait partie d'un déploiement Azure. Global.asax est votre place pour gérer les erreurs d'application Web dans ASP.NET non gérées. Consultez cette question, la réponse qui fournit un bon exemple pour gestionnaire Application_Error () . Vous pouvez utiliser le RequestRecycle méthode statique de type RoleEnvironment d'exiger manuellement le recyclage de rôle dans la méthode Application_Error (). Cependant, ne vous recommande pas de le faire. Je ne vois pas une bonne pratique dans le redémarrage du serveur Web en raison d'une erreur d'application. Vous devez mettre en œuvre une bonne gestion des exceptions et de la stratégie de journalisation des erreurs, examinez vos journaux regulary d'erreur et prendre des mesures pour éviter les erreurs Crytical qui nécessiteraient un redémarrage du serveur. Quelle est votre intention initiale? Pour comprendre quand un rôle sera recyclé automacitally, ou de modéliser votre application telle que de recycler automatiquement votre rôle en cas d'erreur? Si c'est ce dernier, je suggère que vous révisez vos besoins d'affaires / logique. MISE À JOUR 2 Je ne peux pas parler de la bouche de Neil, mais « l'échec de l'instance » est tout ce qui peut causer une machine virtuelle en cours d'exécution pour accrocher. Instance dans Windows Azure est une machine virtuelle signle que le code d'hôtes votre application (lire ce billet de blog explanaition détaillé sur service hébergé, Rôle, Instance). Votre application fonctionne dans un système d'exploitation basé sur Windows Server. Il est une machine virtuelle. Tout peut arriver - de défaillance matérielle sur l'hôte, à un logiciel générique / défaillance du conducteur du système d'exploitation invité. Il est non nécessaire d'être votre code. Donc, dans le cas où il arrive quelque chose qui provoquerait une seule machine virtuelle à l'échec - ce problème est géré automatiquement par Windows Azure Fabric. Si ce neccessary - votre code est automatiquement déployé sur une autre machine virtuelle. Et cela se produit automagiquement. Vous ne nohting. Imaginez un disque dur pauses, ou un module de mémoire brûle, ou cesse de répondre interface réseau - ce ne sont que quelques questions simples qui pourraient causer une machine virtuelle en cours d'exécution à l'échec. Ceci est un échec d'instance. Un échec dans votre code est quelque chose que vous devez prendre en charge. Tout le reste -. Contrôleur Windows Azure Fabric prend en charge Mettre à Jour 3 Cette question est tout à fait hors de portée! Qu'est-ce qui arrive à une application asp.net dans un compte d'hébergement mutualisé? Ou sur site dans IIS installation? plantage de l'application pour l'utilisateur dont les actions a causé l'accident. Le pire application de cas recyclage de la piscine. Je ne l'ai jamais vu une application asp.net « accroché ». Il n'y a pas une telle chose comme « application asp.net terminée » ou « cassé ». S'il est une erreur générique qui est provoquée lors du démarrage de l'application ou la première demande - la demande ne sera jamais en ligne. Si elle est l'erreur causée par une séquence d'actions de l'utilisateur - utilisateur un message d'erreur laid et rien de plus (sauf si vous avez gestionnaire Application_Error () approprié dans votre Global.asax je pense qu'il est assez d'explications pour une question ayant rien à voir. avec Azure. Vous plaisantez? Ce code va planter votre rôle Web et forcera un recyclage: S'il vous plaît accepter cette question, car je ne pense pas qu'il y ait quelque chose qui manque. De plus, il a des réponses à au moins 4 autres questions, ajoutées à l'original. FINAL Il n'y a pas une telle chose comme « tuer l'instance pour toujours ». run-Methoded of a RoleEntryPoint faces an error
RoleEnvironment.RequestRecycle()