2014-09-04 2 views
7

Je souhaite recycler le pool d'applications via mon application.Comment obtenir le nom du pool d'applications via le code (C#, ASP.net)

Auparavant, je stockais le nom du pool d'applications dans ma base de données et l'utilisais pour recycler. Mais il est arrivé dans le passé que nous déplacions des applications d'un pool d'applications à un autre et parfois nous oublions de mettre à jour le nom du pool d'applications dans la base de données.

Donc je pense à obtenir le nom du pool d'applications via l'application et à l'utiliser pour le recyclage.

+0

quelque chose comme ça? http://stackoverflow.com/questions/1400464/enumerating-application-pools-in-iis – fuchs777

Répondre

12

modifié version de @Razon réponse :)

public static string GetCurrentApplicationPoolName() 
    { 
     ServerManager manager = new ServerManager(); 
     string DefaultSiteName = System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName(); 
     Site defaultSite = manager.Sites[DefaultSiteName]; 
     string appVirtualPath = HttpRuntime.AppDomainAppVirtualPath; 

     string appPoolName = string.Empty; 
     foreach (Application app in defaultSite.Applications) 
     { 
      string appPath = app.Path; 
      if (appPath == appVirtualPath) 
      { 
       appPoolName = app.ApplicationPoolName; 
      } 
     } 
     return appPoolName; 
    } 
+1

À mon humble avis, mieux répondre que Razon answer – Kiquenet

+0

Combiner le lien avec le code et cela devrait être la réponse. – Rexxo

+0

Attention: ce code peut générer une exception COM si le paramètre "Charger le profil utilisateur" de l'AppPool sur votre IIS n'est pas défini sur "True" –

7

Dans de nombreux cas, il peut être assez juste lire le nom du pool d'applications de la variable d'environnement:

var apppool = System.Environment.GetEnvironmentVariable(
        "APP_POOL_ID", EnvironmentVariableTarget.Process); 
Questions connexes