Обработка ошибок для WebRequest & Response - PullRequest
0 голосов
/ 27 августа 2018

В настоящее время я запускаю метод, который берет строку (имя домена) и проверяет, доступен ли сайт или нет, и передает информацию в созданный мной объект Domain.В настоящее время я сталкиваюсь с проблемой, когда один из сайтов не работает и, в свою очередь, вылетает приложение.Ниже приведен метод:

private Domain GetStatus(string x)
    {
        string status = "";

        WebRequest req = HttpWebRequest.Create("http://www." + x);
        WebResponse res = req.GetResponse();
        HttpWebResponse response = (HttpWebResponse)res;
        if ((int)response.StatusCode > 226 || response.StatusCode == HttpStatusCode.NotFound)
        {
            status = "ERROR: " + response.StatusCode.ToString();
        }
        else
        {
            status = "LIVE";
        }

        Domain temp = new Domain(x, status);
        return temp;
    }

Первоначально предполагалось, что response.StatusCode == HttpStatusCode.NotFound обработает такую ​​ошибку, но в настоящее время происходит сбой в строке WebResponse res = req.GetResponse ();со следующим ответом:

System.Net.WebException: 'The remote name could not be resolved: 'www.DOMAIN.com''

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

HttpWebRequest - это все о протоколе HTTP, который является своего рода согласованным языком .

Но если человека на другом конце не существует, то как вы можете ожидать егонапример, чтобы вернуть вам «Hello»?

Итак, StatusCode действительно подходит, если фактический удаленный сайт ответил, каково было состояние ответа в соответствии с ресурсом запроса, является ли он успешным (200)?Не найден (404)?Несанкционированный (401) и т. Д.

Исключение означает, что я не смог попасть на сайт по многим причинам.StatusCode означает, что запрошенный ресурс имеет этот тип ответа.

Но более актуальная проверка, если сайт активен или нет, запрашивает статическую страницу и не получает исключения, более здоровая проверка, запрашивает статическую.страница, вы всегда будете считать себя здоровым;значение вернет ответ 200 OK.

Так что все зависит от того, что LIVE означает для вас (или клиента, использующего его).

Является ли удаленный хост на самом деле получает запросы, то есть никаких исключений.Или это на самом деле означает, что он может получать запросы и возвращать мне действительный ответ StatusCode, который я ожидаю, что он вернется (Здоровый).

0 голосов
/ 27 августа 2018

Проблема связана с тем, что ваш собственный код вызывает исключение.

Это может быть связано с отсутствием подключения к Интернету или с проблемой решения DNS (которая может быть вызвана удаленнымparty).

Итак, если удаленный сервер выдает ошибку, вы получите HTTP 500 Internal Server Error, если не можете ее достичь;ваш код выдает исключение, и вам нужно будет его обработать.

Чтобы исправить это, вы можете использовать блок try/catch, например:

private Domain GetStatus(string x)
{
    string status = "";

    try
    {    
         WebRequest req = HttpWebRequest.Create("http://www." + x);
         WebResponse res = req.GetResponse();
         HttpWebResponse response = (HttpWebResponse)res;
         if ((int)response.StatusCode > 226 || 
             response.StatusCode ==  HttpStatusCode.NotFound)
         {
             status = "ERROR: " + response.StatusCode.ToString();
         }
         else
         {
             status = "LIVE";
         }
     }
     catch (Exception e)
     {
          status = "ERROR: Something bad happend: " + e.ToString();
     }

     Domain temp = new Domain(x, status);
     return temp;
}


ByКстати, сообщение

Удаленное имя не может быть разрешено

указывает, что хост не может быть разрешен.

Скорее всего, причина в том, что ваш интернет не работает или домен неправильно написан, или маршрут к домену неисправен (например, в интрасети).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...