C # HttpWebResponse Тайм-аут не работает - PullRequest
1 голос
/ 09 июня 2011

У меня есть функция, чтобы проверить, доступен ли сайт.

    public bool ConnectionAvailable(string strServer)
    {
        try
        {
            HttpWebRequest reqFP = (HttpWebRequest)HttpWebRequest.Create(strServer);
            reqFP.Timeout = 10000;
            HttpWebResponse rspFP = (HttpWebResponse)reqFP.GetResponse();

            if (HttpStatusCode.OK == rspFP.StatusCode)
            {
                // HTTP = 200 - Internet connection available, server online
                rspFP.Close();
                return true;
            }
            else
            {
                // Other status - Server or connection not available
                rspFP.Close();
                return false;
            }
        }
        catch (WebException)
        {
            // Exception - connection not available
            return false;
        }
    }

Это не мой код.Я нашел его в сети.

Проблема в том, что какой-то веб-сайт недоступен.Я хочу подождать x миллисекунд (устанавливается в reqFP.Timeout), затем функция должна вернуть false.Но каждый раз мне приходится ждать ~ 20 секунд (даже если я установил 10 секунд в «тайм-аут»).

У вас есть идеи, что не так?

PS: Извините за языковые ошибки.

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

С MSDN артикул :

Запрос системы доменных имен (DNS) может возврат займет до 15 секунд или время вышло Если ваш запрос содержит имя хоста, которое требует разрешения и Вы устанавливаете Тайм-аут на значение меньше 15 секунд, это может занять 15 секунд или больше, прежде чем выбрасывается WebException указать время ожидания по вашему запросу.

Если это возможно, это так? Попробуйте вменяемый код, но используйте IP-адрес вместо имени хоста. Кроме того, когда вы получаете false после ожидания 20 секунд, вы уверены, что это из-за тайм-аута, а не потому, что сервер возвратил что-то отличное от «200»?

0 голосов
/ 09 июня 2011

Попробуйте это свойство: ReadWriteTimeout

...