Подтвердить что ты не робот

С# Проверить удаленный сервер

Может ли кто-нибудь сообщить, что лучший способ проверить (используя .NET 3.5), если доступен удаленный сервер?

Я думал использовать следующий код, но хотел бы знать, существует ли лучший способ, если у сообщества есть другой вариант.

TcpClient client = new TcpClient("MyServer", 80);
if (!client.Connected)
{
    throw new Exception("Unable to connect to MyServer on Port 80");
}
client.Close();
4b9b3361

Ответ 1

Вы можете ping it

Вы можете загрузить страницу по умолчанию из него

Вы можете сделать HEAD запрос

Если это локальный сервер IIS6 в вашей сети, и у вас есть некоторые данные администратора, вы можете подключиться к IIS, используя некоторый код DirectoryEntry

Некоторые ответы на 136615 могут также помочь, в частности, принятый ответ, который говорит о сокеты

Для серверов печати (или, в частности, для принтеров) код K Scott здесь может помочь. Это забавный код для игры в любом случае:-) Этот код упоминает dns.resolve, который устарел и заменен на Dns.GetHostEntry

У меня есть идеи: -)

Ответ 2

Если вы просто хотите посмотреть, находится ли данный сервер в сети, тогда простой пинг должен выполнять эту работу в большинстве случаев.

PingReply pingReply;
using (var ping = new Ping())
    pingReply = ping.Send("http://www.stackoverflow.com/");
var available = pingReply.Status == IPStatus.Success;

Используя этот метод, вы также не злоупотребляете HTTP-сервером.

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

Ответ 3

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

Imports System.Net
Private Function URLExists(pURL As String) As Boolean

    Try
        'Creating the HttpWebRequest
        Dim request As HttpWebRequest = TryCast(WebRequest.Create(pURL), HttpWebRequest)
        'Setting the Request method HEAD, you can also use GET too.
        request.Method = "HEAD"
        'Getting the Web Response.
        Dim response As HttpWebResponse = TryCast(request.GetResponse(), HttpWebResponse)
        'Returns TURE if the Status code == 200
        Return (response.StatusCode = HttpStatusCode.OK)
    Catch
        'Any exception will returns false.
        Return False
    End Try
End Function

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

Ответ 4

Если вы используете предыдущую версию .NET Framework, такую ​​как я, версия 2, у вас не будет Ping и no System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable(). Затем вы можете использовать HttpWebRequest, чтобы проверить диспетчеризацию хоста:

  public static bool AccessToWebService()
  {
      string host = "http://192.168.99.41";
      try
      {
          HttpWebRequest request = (HttpWebRequest) WebRequest.Create(host);
          request.Method = "HEAD";
          HttpWebResponse response = (HttpWebResponse) request.GetResponse();
          return response.StatusCode == HttpStatusCode.OK;
      }
      catch (Exception)
      {
          return false;
      }
  }

Ответ 5

Я предполагаю, что вы хотите проверить, доступен ли сайт. Вы можете просто использовать System.Net.WebRequest и проверить результат.

Update: Основываясь на вашем комментарии, если у вас есть несколько серверов (и служб) для мониторинга, то, возможно, было бы лучше использовать такой пакет, как Nagios, HostMonitor или IPSentry вместо того, чтобы кататься самостоятельно.