Как определить, запущено ли в данный момент веб-приложение - PullRequest
7 голосов
/ 19 ноября 2010

У меня есть веб-приложение ASP.NET, работающее под IIS 6, и другой процесс, который отвечает за мониторинг и отчетность о состоянии.

Я хотел бы попробовать веб-приложение с помощью процесса мониторинга, чтобы проверить его состояние с помощью специального обработчика в веб-приложении, НО Я не хочу "просыпаться" веб-приложение, если оно не запущено.

Можно ли определить, запущено ли конкретное веб-приложение в данный момент? если есть такая опция, я смог бы сначала проверить, запущено ли приложение, и только затем получить доступ к обработчику, чтобы проверить его состояние.

Спасибо.

Ответы [ 6 ]

2 голосов
/ 19 ноября 2010

Я должен был сделать нечто подобное ранее в этом году для IIS7, не уверен, что это будет работать для IIS6, но вот что я сделал.

        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 возвращает 2 для запуска и 4 для остановки.

1 голос
/ 19 ноября 2010

Вы можете использовать HTTP-запрос HEAD, чтобы проверить, работает ли сайт.Вот пример, чтобы сделать то же самое.

http://www.eggheadcafe.com/tutorials/aspnet/2c13cafc-be1c-4dd8-9129-f82f59991517/the-lowly-http-head-reque.aspx

0 голосов
/ 22 ноября 2010

Раньше мы использовали Nagios для мониторинга нашего сайта, и он был ориентирован на значок нашего сайта. Если бы он мог вытащить иконку назад, мы бы знали, что сайт работает.

0 голосов
/ 19 ноября 2010

Это мое решение:

    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
    }
0 голосов
/ 19 ноября 2010

Вы можете проанализировать файл журнала IIS, чтобы увидеть, есть ли последние записи.

Если ваше приложение мало используется, возможно, последнюю «запись» еще нужно очистить.

Или вы можете обновить файл / базу данных, указав «все еще активен».

Если вы действительно не хотите задержки, в Application_Start и Application_End создайте и уничтожьте системный мьютекс.

0 голосов
/ 19 ноября 2010

Я бы включил в веб-сайт ASP.NET файл asmx, веб-сервис с простой функцией Ping, но он все равно пробудит пул приложений на сайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...