Какое исключение или код статуса http для случая, когда сервер не работает

Я хочу контролировать сервер WCF, и отправить уведомление по электронной почте, если сервер не работает. Для этого я пишу консольное приложение для периодической отправки фиктивного запроса на сервер и проверки, отправлен ли ответ обратно. Когда консольное приложение получает исключение, на сервере возникают проблемы, в том числе сервер падает.

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

Когда IIS выключен

System.ServiceModel.EndpointNotFoundException,

Сообщение:
http://localhost/service.svc не было конечной точки, которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Смотрите InnerException, если он присутствует, для получения дополнительной информации подробности.

Внутреннее исключение Сообщение:Удаленный сервер вернул ошибку: (404) Not Found

Когда файл Web.config намеренно изменяется на неправильное имя:

System.ServiceModel.ServiceActivationException
Ссылка: http://localhost/service.svc
Message:
Запрошенная служба 'http://localhost/service.svc' не может быть активирована. Смотрите журналы диагностической трассировки сервера для получения дополнительной информацию.

По другой неизвестной причине

System.ServiceModel.ServerTooBusyException
Сообщение:
Служба HTTP, расположенная по адресу http://localhost/service.svc', слишком занята.
Сообщение:
Удаленный сервер выдал ошибку: (503) Server Unavailable.

Обновление 1

Исключение НЕ всегда возвращает код состояния http.

Обновление 2 Помимо использования WCF proxy для вызова службы, мне приходится использовать и WebRequest, как показано ниже:

       try
        {
            WebRequest webRequest = WebRequest.Create(uri);
            webRequest.Method = "GET";

            HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse();                             

        }
        catch ()  //what excpetion will tell me server is down??
        {
           ...
        }

5
задан Pingpong 7 February 2012 в 22:01
поделиться