2010-11-19 39 views
7

Tengo una aplicación web ASP.NET ejecutándose bajo IIS 6, y otro proceso que es responsable de supervisar e informar el estado.Cómo determinar si una aplicación web se está ejecutando actualmente

Me gustaría muestrear la aplicación web mediante el proceso de supervisión para verificar su estado accediendo a un manejador dedicado en la aplicación web, PERO No quiero "despertar" la aplicación web en caso no está funcionando.

¿Existe alguna opción para determinar si una aplicación web específica se está ejecutando actualmente? si existe tal opción, primero podría verificar si la aplicación se está ejecutando, y solo entonces acceder al controlador para verificar su estado.

Gracias.

Respuesta

0

Incluiría en el sitio web ASP.NET un archivo asmx, un servicio web con una función Ping simple, pero aún así se reactivará el grupo de aplicaciones del sitio web.

+0

'[WebMethod] public bool IsSiteActive {return true;/* Sí, ahora es * /} ' – GvS

+1

esto siempre devolverá 'verdadero' como cuando accederá a este asmx cuando la aplicación no se inicie - hará que la aplicación se inicie y el asmx será accesible. así que esta no es una solución desafortunadamente. – Satumba

0

Puede analizar el archivo de registro de IIS para ver si hay entradas recientes.

Si su aplicación no se usa mucho, es posible que la última "entrada" aún tenga que ser enjuagada.

O podría actualizar un archivo/base de datos para indicar "todavía activo".

Si realmente no desea un retraso, en Application_Start y Application_End, cree y destruya un mutex del sistema.

+0

Puedo crear un marcador (usando un archivo o base de datos) que se actualizará en Application_Start y Application_End, pero, ¿cree que es lo suficientemente seguro? ¿Puedo contar que Application_End siempre ocurrirá? también en la excepción de la aplicación? – Satumba

+1

Creo que deberás probar. – GvS

0

Esta es mi solución:

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

que tenía que hacer algo similar a principios de este año por IIS7, no estoy seguro si esto funcionaría para IIS6 pero aquí es lo que hice.

 var iis = new DirectoryEntry("IIS://" + Environment.MachineName + "/w3svc"); 

     foreach (DirectoryEntry site in iis.Children) 
     { 
      if (site.SchemaClassName.ToLower() == "iiswebserver") 
      { 
       Console.WriteLine("Name: " + site.Name); 
       Console.WriteLine("State: " + site.Properties["ServerState"].Value); 
      } 
     } 

ServerState devuelve 2 para iniciar y 4 para detener.

+0

Eso se ve genial y más elegante. Lo busqué en Google y parece que también es compatible con IIS6. Lo probaré y actualizaré. ¡Muchas gracias! – Satumba

+0

¿Cómo te fue? ¿Lo hiciste funcionar? – Phill

+0

Desafortunadamente, parece que no funciona. No obtengo el estado de mi aplicación de directorio virtual. todavía estoy revisándolo. – Satumba

0

Solíamos usar Nagios para monitorear nuestro sitio y se enfocaba en el favicon de nuestro sitio web. Si pudiera retirar el ícono, sabíamos que el sitio estaba listo.

Cuestiones relacionadas