Какое исключение или код статуса http для когда сервер не работает - PullRequest
5 голосов
/ 07 февраля 2012

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

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

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

System.ServiceModel.EndpointNotFoundException,

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

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

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

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

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

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

Обновление1

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Фактическое содержание ошибки на самом деле не должно иметь значения - если вы не отслеживаете отдельные операции в службе (т. Е. Если POST с некоторыми данными по определенному URL-адресу возвращает определенный ответ) - реально, тогда выпросто собираемся посмотреть на сам код состояния;и для этого вы хотите просмотреть все коды состояния HTTP и увидеть те из них, которые для вас выглядят как ошибки.

В качестве хорошей отправной точки - вы можете захотетьрассмотреть почти все коды 5xx;поскольку все они связаны с ошибками сервера.

Возможно, вы также захотите рассмотреть некоторые коды 4xx (хотя обычно они связаны с клиентами, поэтому будьте безжалостны).В частности:

400 - Bad Request - при условии, что вы можете быть уверены, что сервер сможет понять запрос

404 - Not Found - если выубедитесь, что данный URL должен присутствовать

405 - Method Not Allowed - если вы уверены, что данный HTTP-глагол должен поддерживаться (например, POST или DELETE)

Для некоторых из более узких кодов 4xx, например, 413 Request Entity Too Large или 414 Request-URI Too Long;это может произойти после нескольких дней или месяцев нормальной работы из-за таких вещей, как обновления безопасности.В этом случае вы не обязательно указываете, что служба не работает как таковая, но вы можете ожидать, что она не сможет выполнить свою функцию.

1 голос
/ 07 февраля 2012

Любой код результата состояния HTTP в сериях 400 или 500 является проблемой, которая препятствует обработке вашего запроса. Все эти ошибки происходят от System.ServiceModel.CommunicationException, поэтому проверьте это.

...