Простой способ проверить связь с веб-сервером, чтобы увидеть, работает ли он / жив? - PullRequest
3 голосов
/ 29 мая 2011

У меня есть распределенный веб-сайт (.NET, IIS) с динамическим числом серверов по всему миру.

Я хочу создать [простую] утилиту, которая будет сидеть у нас дома, и каждый раз «пинговать» веб-серверы, чтобы увидеть, работают ли они. Затем я зарегистрирую этот результат для каждого сервера в базе данных, чтобы показать текущее состояние и историю любых обнаруженных простоев.

Каков наилучший способ сделать это? Подключиться через HTTP из .NET? Я хочу, чтобы это было не много кода (в идеале), а запуск в качестве службы.

Любые ссылки или примеры кода будут с благодарностью.

Это стандартная практика? Или распределенные приложения обычно делают что-то другое? (как телефон дома вместо того, чтобы пинговать).

Ответы [ 2 ]

3 голосов
/ 29 мая 2011

Вот ТАК вопрос, который близок к вашему:

Лучший способ проверить, жив ли сайт из приложения на C #

Как правило, вы можете проверить статус сайта, используя следующий код:

WebRequest request = WebRequest.Create("http://localhost/myContentSite/test.aspx");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response == null || response.StatusCode != HttpStatusCode.OK)
{
   Console.WriteLine("You have a problem");
}

Что касается наилучшего способа сделать это, я бы порекомендовал использовать модель домашнего телефона, если это возможно в вашей ситуации. Таким образом, вам не нужно заботиться о том, кто был добавлен. Они просто автоматически появятся при первой регистрации. Однако, если вы не имеете полного контроля над кодом всех ваших сайтов (или если вы уже запустили их), вероятно, было бы лучше использовать централизованный решение для мониторинга, которое проверяет доступность сайта. Это уменьшит количество изменений, которые необходимо внести в системы. Наконец, если вы хотите действительно проверить, что сайт работает, проверьте удаленно, а не отправляйте сообщение «Я жив». Это обеспечит работоспособность брандмауэра и т. Д., Поскольку сайт может отправлять сообщения, но он может быть недоступен из внешних сетей.

0 голосов
/ 29 мая 2011

Вы можете использовать класс WebRequest для этого.

var request = WebRequest.Create("http://google.com");
using (var response = request.GetResponse())
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
    var responseText = streamReader.ReadToEnd();

    // validate that responseText has content that you would expect
}

Я рекомендую проверить содержимое страницы, чтобы убедиться, что ваш сайт развернут правильно.Веб-сайт может возвращать StatusCode HttpStatusCode.OK, показывая вместо страницы, которую вы ожидали увидеть, страницу приветствия IIS, если сайт был неправильно развернут.

...