Проверьте, жив ли сайт из приложения на C # - PullRequest
43 голосов
/ 09 октября 2008

Я ищу лучший способ проверить, жив ли сайт из приложения на C #.

Фон

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

Приложение написано на C #, .NET 3.5, Visual Studio 2008

Текущее решение

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

WebRequest request = WebRequest.Create("http://localhost/myContentSite/test.aspx");
WebResponse response = request.GetResponse();

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

Вопрос

Это самый простой, правильный способ или есть какой-то другой подлый вызов, о котором я не знаю в C #, или лучший способ сделать это.

Ответы [ 7 ]

79 голосов
/ 09 октября 2008
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response == null || response.StatusCode != HttpStatusCode.OK)
19 голосов
/ 15 октября 2010

При использовании WebResponse, пожалуйста, убедитесь, что вы закрыли поток ответов, т. Е. (.Close), иначе он зависнет на машине после определенного повторного выполнения. Например,

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sURL);
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
// your code here
response.Close();
9 голосов
/ 09 октября 2008

из проекта NDiagnostics на CodePlex ...

public override bool WebSiteIsAvailable(string Url)
{
  string Message = string.Empty;
  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);

  // Set the credentials to the current user account
  request.Credentials = System.Net.CredentialCache.DefaultCredentials;
  request.Method = "GET";

  try
  {
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
      // Do nothing; we're only testing to see if we can get the response
    }
  }
  catch (WebException ex)
  {
    Message += ((Message.Length > 0) ? "\n" : "") + ex.Message;
  }

  return (Message.Length == 0);
}
3 голосов
/ 09 октября 2008

Предполагая, что служба WCF и веб-сайт находятся в одном веб-приложении, вы можете использовать веб-сервис «Статус», который возвращает статус приложения. Вы, вероятно, хотите сделать что-то из следующего:

  • Проверка работоспособности базы данных (хорошая строка подключения, служба запущена и т. Д.)
  • Проверка работоспособности сайта (насколько точно зависит от сайта)
  • Проверка работоспособности WCF (насколько точно это зависит от вашей реализации)
  • Дополнительный бонус: вы можете возвратить некоторую информацию о версиях в сервисе, если вам потребуется поддержка различных версий в будущем.

Затем вы создаете клиент в приложении Win.Forms для WebService. Если WS не отвечает (т.е. вы получаете какое-то исключение при вызове), то веб-сайт не работает (как «общая ошибка»).
Если WS отвечает, вы можете проанализировать результат и убедиться, что все работает, или, если что-то сломано, вернуть больше информации.

2 голосов
/ 14 февраля 2018

Сегодня мы можем обновить ответы, используя HttpClient () :

HttpClient Client = new HttpClient();
var result = await Client.GetAsync("https://stackoverflow.com");
int StatusCode = (int)result.StatusCode;
0 голосов
/ 11 ноября 2014

Решение от: Как проверить, работает ли веб-сайт на C #?

var ping = new System.Net.NetworkInformation.Ping();

var result = ping.Send("https://www.stackoverflow.com");

if (result.Status != System.Net.NetworkInformation.IPStatus.Success)
    return;
0 голосов
/ 09 октября 2008

Вы хотите проверить код состояния для OK (статус 200).

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