Pour être honnête, j'ai essayé de mettre un sale coup sur IIS et juste quand je pensais que j'allais sortir avec elle, j'ai réalisé que ma solution de contournement ne fonctionne pas. Voici ce que j'ai essayé de faire:
1) j'ai ASP.NET l'application qui a Preloader classe qui hérite IProcessHostPreloadClient et fait toutes les lourds initialisation de la Précontrainte de la méthode de la mise en œuvre (application est complexe et c'est une partie d'un vaste système, donc il faut environ 2 minutes pour établir des connexions avec tous les services nécessaires et de pré-instancier une certaine Unité des inscriptions).
2) j'ai beaucoup de travail qui doit être fait sur l'arrêt de l'application (désabonnement, la déconnexion, l'élimination,...), et je crois que le meilleur endroit pour le faire est dans *Application_End* méthode situé dans le Mondial.asax.
3) Tout fonctionne très bien quand j'ai une activité de l'utilisateur (première demande après l'Application de la Piscine qui contient web susmentionné application est démarrée entraînera *Application_Start* pour être appelés, et par la suite *Application_End* est appelée sur le Pool d'Applications de l'arrêter ou de recycler), mais des problèmes se produisent lorsqu'il n'y a aucune activité de l'utilisateur et de l'application tente de se relancer après avoir été active pendant 48 heures (configuré). Puisqu'il n'y a pas de demande, demande officiellement de ne pas commencer. Ergo, il ne peut pas être gracieusement arrêté depuis *Application_End* ne sera pas appelé.
4) Maintenant vient le désordre de la partie... j'ai essayé de faire une demande de code à la fin de la Précontrainte de la méthode, et cela a fonctionné. Mais cette solution semble mauvais pour moi, même si elle a fonctionné. Donc, j'ai essayé beaucoup de choses, et la dernière chose que j'ai essayé était ceci:
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);
... et qui a fait de l'effet. *Application_Start* a été appelé, (je l'ai vérifié en réponse, on a contenant de la page de connexion qui était censé être affiché dans la demande initiale) et sur le Pool d'Applications de l'arrêt de l'application s'est terminée normalement faire le travail nécessaire en *Application_End*.
MAIS
Après l'application a été commencé (préchargés et initié) de cette manière, c'est ce qui est arrivé quand j'ai voulu atteindre application via un navigateur Web:
Erreur HTTP 500.21 - Erreur Interne du Serveur Handler "ExtensionlessUrlHandler-Intégré-4.0" a un mauvais module "ManagedPipelineHandler" dans sa liste de module
Je ne suis pas en mesure de comprendre cela. Quelqu'un peut-il me dire pourquoi cela arrive et comment le résoudre?
Si je n'ai pas trouver cela, je vais revenir à la première solution (envoi d'OBTENIR la demande de code), mais ce problème de bug moi, puisque je n'ai même pas une idée de ce qui est faux.