Я хочу контролировать сервер 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??
{
...
}