Самый быстрый способ проверить интернет-соединение

C # 2008 SP1

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

Итак, я хочу использовать класс httpWebRequest для подключения к веб-сайту наших клиентов. Если ответ в порядке, то подключение к Интернету может продолжаться.

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

Однако, когда я захожу на их сайт, загрузка страницы занимает менее секунды. Но занимает слишком много времени, когда я использую класс HttpWebRequest

Итак, требования для этого:

Когда-нибудь прокси будет использоваться в офисе клиента. Я не могу использовать класс TCPClient (не имеет прокси-свойства).

Прокси не поддерживает SOCKS, поэтому не может использовать класс Sockets.

Мне нужно использовать свойство тайм-аута. Поэтому нельзя использовать класс WebClient. Это связано с тем, что программный телефон зависает до тех пор, пока не будет получен ответ. Так что таймаут через несколько секунд.

Так что я могу думать только о классе HttpWebRequest.

  HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.xxxxxxxxx.com");
            request.Timeout = 5000;
            request.Credentials = CredentialCache.DefaultNetworkCredentials;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                Console.WriteLine("IsSIPServerAvailable: " + response.StatusCode);
                isAvailable = true;
            }

======== Редактировать с помощью p \ Invoke ====

 [DllImport("wininet.dll", CharSet = CharSet.Auto)]
    private extern static bool InternetGetConnectedState(ref InternetConnectionState_e lpdwFlags, int dwReserved);

 [Flags]
    enum InternetConnectionState_e : int
    {
        INTERNET_CONNECTION_MODEM = 0x1,
        INTERNET_CONNECTION_LAN = 0x2,
        INTERNET_CONNECTION_PROXY = 0x4,
        INTERNET_RAS_INSTALLED = 0x10,
        INTERNET_CONNECTION_OFFLINE = 0x20,
        INTERNET_CONNECTION_CONFIGURED = 0x40
    }

 // In function for checking internet
 InternetConnectionState_e flags = 0;          
 bool isConnected = InternetGetConnectedState(ref flags, 0);

Ответы на вопрос(6)

Ваш ответ на вопрос