2010-11-19 7 views
7

J'ai une application Web ASP.NET exécutée sous IIS 6 et un autre processus chargé de surveiller et de signaler l'état. Je voudrais échantillonner l'application Web par le processus de surveillance afin de vérifier son état en accédant à un gestionnaire dédié sur l'application Web, MAIS Je ne veux pas "réveiller" l'application Web cas, il ne fonctionne pas.Comment déterminer si une application Web est en cours d'exécution

Existe-t-il une option pour déterminer si une application Web spécifique est en cours d'exécution? S'il y a une telle option, je serais capable de vérifier d'abord si l'application est en cours d'exécution, et seulement ensuite d'accéder au gestionnaire pour vérifier son statut.

Merci.

Répondre

0

Je voudrais inclure dans le site Web ASP.NET un fichier asmx, un service Web avec une fonction Ping simple, mais il va encore réveiller le pool d'applications du site Web.

+0

'[WebMethod] public bool IsSiteActive {return true;/* Oui, maintenant c'est * /} ' – GvS

+1

cela retournera toujours 'true' comme quand vous accéderez à cette asmx quand l'application n'est pas démarrée - cela provoquera le démarrage de l'application et l'accès à asmx. donc ce n'est pas une solution malheureusement. – Satumba

0

Vous pouvez analyser le fichier journal IIS pour voir s'il existe des entrées récentes.

Si votre application n'est pas beaucoup utilisée, il est possible que la dernière "entrée" doive encore être vidée. Ou vous pouvez mettre à jour un fichier/base de données pour indiquer "encore actif".

Si vous ne voulez vraiment pas de délai, dans Application_Start et Application_End, créez et détruisez un mutex système.

+0

Je peux créer un drapeau (en utilisant un fichier ou une base de données) qui sera mis à jour sur Application_Start et Application_End, mais pensez-vous qu'il soit suffisamment sûr? puis-je compter que Application_End se produira toujours? également sur l'exception d'application? – Satumba

+1

Je pense que vous devrez tester. – GvS

0

C'est ma solution:

try 
    { 
     WebRequest request = WebRequest.Create("http://localhost/"); 
     WebResponse response = request.GetResponse(); 
    } 
    catch (WebException ex) 
    { 
     // ex.Status will be WebExceptionStatus.ConnectFailure 
     // if the site is not currently running 
    } 
2

je devais faire quelque chose de similaire plus tôt cette année pour IIS7, pas sûr que cela fonctionnerait pour IIS6, mais voici ce que je faisais. ServerState renvoie 2 pour le démarrage et 4 pour l'arrêt.

+0

Cela a l'air cool et le plus élégant. Je l'ai googlé et il semble qu'il est également pris en charge par IIS6. Je vais essayer et mettre à jour. Merci beaucoup! – Satumba

+0

Comment ça s'est passé? Avez-vous réussi à le faire fonctionner? – Phill

+0

Malheureusement, cela ne semble pas fonctionner. Je ne reçois pas le statut pour mon application de répertoire virtuel. Je le vérifie toujours. – Satumba

0

Nous avions l'habitude d'utiliser Nagios pour surveiller notre site et cibler le favicon de notre site Web. S'il pouvait retirer l'icône, nous savions que le site était en place.

Questions connexes