2010-08-27 2 views
4

Я создаю приложение мониторинга для постоянного мониторинга всех аспектов моей системы. Я надеялся использовать функцию Ping(), чтобы определить, если сервер запущен, но сам MSDN documentation говорит, что это не самый лучший способ:Как проверить, работает ли веб-сервер? (C#)

Удачный Ping показывает только то, что удаленный хост может быть достигнуто на сеть; наличие более высокого уровня услуг (например, веб-сервера) на удаленном хосте не гарантируется.

Есть ли другие способы сделать это лучше?

ответ

5

Вам нужно будет установить на одной странице/url, который вы хотите протестировать, либо тот, который уже существует, либо тот, который вы создаете для конкретной цели проверки доступности серверов.

После каждого [периода времени] вы можете сделать запрос на этот URL-адрес и проверить ответ, чтобы определить, содержит ли оно ожидаемое значение (-ы), например, содержимое страницы, если вы запросили mysite.com/default.aspx. Лучше всего сделать один вызов URL/страницы/веб-службы на «ping», так как он гарантирует, что он не сломается, если содержимое проверяемой вами страницы будет изменено без вашего уведомления.

Одна вещь, которую я действительно рекомендую против делает, имея этот метод испытания один пинг все, включая ваше подключение к базе данных, третья сторона доступности веб-службы, дискового пространства и т.д., ... Если вы хотите сделать это, есть несколько методов, которые вы можете вызвать, чтобы вы могли сразу увидеть, что вызывает проблему.

+0

Моя обычная практика заключается в создании страницы состояния (только для внутренней видимости), которая выгружает XML-документ, детализирующий состояние подкомпонентов - предоставляет как один порт захода, так и подробную информацию о системе. – annakata

+0

хорошая идея. благодаря! –

2

Я обычно выставляю на моем сервере веб-метод Ping, который иногда также выполняет некоторые базовые медицинские проверки системы (при необходимости). Тогда это всего лишь вопрос веб-вызова вашего метода Ping, и вы знаете состояние своей системы.

3

Просто создайте обработчик (или страницу) для своего сайта, который возвращает некоторую информацию о вашей системе в xml, json или любом другом формате, например.

database: ok 
service x: ok 

Затем с помощью WebClient, чтобы получить эту информацию

var client = new WebClient(); 
string response = client.DownloadString("http://mydomain.com/state.ashx"); 
// parse information 
+0

Хорошо работает, если «Ping» отключен на веб-сервере, к которому вы пытаетесь связаться! –

1

Или вы можете сделать хорошее соединение сокетов к порту IIS (по умолчанию 80). Отправьте строку, подобную «PING \ r \ n», и посмотрите, что вы получите в ответ.

Обычно вы получаете сообщение «HTTP/1.1 400 Bad Request ....» в ответ. Таким образом, вы знаете, как он работает.

Если вы не можете получить соединение, веб-сервер либо работает, либо что-то блокирует между ними (настройки брандмауэров/маршрутизаторов и т. Д.).

Смежные вопросы