Comment forcer le pool d'applications IIS à redémarrer chaque fois que le domaine de l'application est rechargé?

Nous avons une ASP.NET MVC 4 application qui se lie à l'héritage du code natif. Le problème est que cet héritage code mondial de la statique qui sont construits au démarrage, mais parce que du code natif ne sait rien à propos de l'App Domaines, que le code n'est pas ré-initialisé lorsque le Domaine d'Application est rechargé. Cela provoque un comportement incorrect ou se bloque dans notre application jusqu'à ce que le Pool d'Applications de processus est redémarré.

À cause de cela, je voudrais forcer l'Application de la Piscine à recycler chaque fois que notre application Domaine d'Application est recyclé. Est-il un paramètre dans IIS pour cela, ou est-il un code que je peux appeler ma demande que le domaine est en cours de déchargement?

Quelques infos sur ma configuration,

  1. ASP.NET MVC 4 application
  2. IIS 7.5, mais je peux me déplacer à 8 si nécessaire
  3. Je peux vous assurer qu'il n'y est une application par Application de la Piscine, donc je ne sera pas affecter les autres applications.

Mise à jour

En fonction de la réponse ci-dessous, j'ai accroché jusqu'à l'AppDomain événement unload et utilisé un code semblable au suivant de recyclage de l'Application de la Piscine.

try
{
   //Find the worker process running us and from that our AppPool
   int pid = Process.GetCurrentProcess().Id;
   var manager = new ServerManager();
   WorkerProcess process = (from p in manager.WorkerProcesses where p.ProcessId == pid select p).FirstOrDefault();

   //From the name, find the AppPool and recycle it
   if ( process != null )
   {
      ApplicationPool pool = (from p in manager.ApplicationPools where p.Name == process.AppPoolName select p).FirstOrDefault();
      if ( pool != null )
      {
         log.Info( "Recycling Application Pool " + pool.Name );
         pool.Recycle();
      }
   }
}
catch ( NotImplementedException nie )
{
   log.InfoException( "Server Management functions are not implemented. We are likely running under IIS Express. Shutting down server.", nie );
   Environment.Exit( 0 );
}

source d'informationauteur Rob Prouse