2009-09-09 7 views
1

J'écris une application de surveillance Web qui fournit des informations sur tous les pools d'applications/applications sur mon serveur IIS. Je suis à la recherche d'un moyen en C# pour vérifier par programme si une application IIS est en cours d'exécution sans l'exécuter si elle ne l'est pas.Vérifiez si l'application IIS est en cours d'exécution sans l'exécuter

Voici ce que j'ai trouvé ...

    l'application
  1. est en cours d'exécution, il y a une ou plusieurs sessions actives.
  2. toutes les sessions ont été supprimées ... l'application est toujours en cours d'exécution, le processus de travail du pool d'applications est en cours d'exécution.
  3. À un certain point déterminé par IIS, l'Application_End est finalement exécutée ... cependant, le processus de travail du pool d'applications est toujours en cours d'exécution.
  4. Après 20 minutes, le processus de travail du pool d'applications s'arrête définitivement en raison de l'inactivité.

C'est entre # 3 et # 4 que j'ai des problèmes. L'application est terminée, mais si j'essaie d'envoyer une demande Http à l'application, elle démarrera automatiquement. Je suis à la recherche d'un moyen de déterminer par programme si l'application est terminée (alors que le processus de travail est toujours en attente d'arrêt) sans redémarrer l'application.

Je peux essayer de fournir plus de détails si vous ne savez pas de quoi je parle.

Cordialement, Jeremy

Répondre

0

Microsoft a créé un fichier VBScript pour identifier les pools d'applications IIS (par processus Id). Si vous recherchez "iisapp.vbs" sur google, il devrait vous diriger dans la bonne direction.

Note: Je ne suis pas sûr à 100% que cela fonctionnera avec Windows Server 2008, mais ne fonctionne avec 2003.

0

Dans IIS7 vous pouvez utiliser appcmd apppool /? pour voir quelles sont les possibilités disponibles.

+0

et pour IIS 6.0 ?? – Kiquenet

1

Je trouve cela sur MSDN

public bool CheckIISRunning() 
    { 
    ServiceController controller = new ServiceController("W3SVC"); 
    return controller.Status == ServiceControllerStatus.Running; 
    } 

Pour cela fonctionne, vous devez avoir System.ServiceProcess ajouté comme référence.

Questions connexes