J'exécute une webapp ASP.NET MVC dans IIS 8.0. Mon application doit être réchauffée avant de prendre des demandes. Nous avons déjà un processus pour réchauffer automatiquement l'application lorsque nous déployons un nouveau code. Cependant, nous voyons des événements périodiques de recyclage du pool d'applications qui entraînent le non-réchauffement de l'application.
Existe-t-il une meilleure pratique pour détecter un événement de recyclage de pool d'applications et exécuter un script ou du code?
Vous pouvez faire plusieurs choses:
Vous pouvez utiliser Module d'initialisation d'application qui est fourni avec IIS 8.0
vous pouvez avoir quelque chose comme ça dans votre web.config
<applicationInitialization
doAppInitAfterRestart="true" >
<add initializationPage="/" />
</applicationInitialization>
Cela enverra une demande à la racine de votre application (initializationPage="/"
) Chaque fois que votre application démarre automatiquement.
Vous pouvez également configurer le mode de démarrage de votre pool d'applications sur Always Running
, Ce qui signifie que chaque fois que IIS redémarre, il s'assurera de démarrer votre pool d'applications immédiatement (ceci si à partir du clic droit) sur votre pool d'applications puis Advanced Settings
et Preload
pour votre site lui-même (clic droit sur le site puis Manage Site
puis Advanced Settings
De plus, vous pouvez désactiver idleTimeout (par défaut IIS fermera l'application après 20 minutes d'activité)) en changeant le de Idle Time-out
De votre pool d'applications à 0 (infini)
désactivez également Regular Time Interval (minutes)
par défaut IIS recyclerait votre application toutes les 29 heures.
For
D'après mon expérience, AlwaysRunning et Preload activé n'accélèrent pas beaucoup. Le temps d'attente le plus long est consacré à la compilation dynamique (qui peut être corrigée avec la précompilation aspx) et au chargement des assemblages dans la mémoire et la mise en cache.