Ошибка таймаута WebClient

Я создал класс, как показано ниже.

public class WebDownload : WebClient
{
    private int _timeout;
    /// <summary>
    /// Time in milliseconds
    /// </summary>
    public int Timeout
    {
        get
        {
            return _timeout;
        }
        set
        {
            _timeout = value;
        }
    }

    public WebDownload()
    {
        this._timeout = -1;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest result = base.GetWebRequest(address);
        result.Timeout = this._timeout;
        return result;
    }
}

Когда я создаю объект этого класса, он создает объект webclient и устанавливает timeout в -1, так что он ждет неограниченное время для ответа.

Но даже после того, как я установил timeout в -1, это приведет к ошибке таймаута.

Есть ли решение для этого?

Ответ 1

У меня есть идея, откуда вы получили часть -1, но в статье MSDN, касающейся Timeout, говорится, что она будет бросьте ArgumentOutOfRangeException, если:

Значение, указанное , меньше нуля и не является бесконечным.

Значение по умолчанию составляет 100 000 миллисекунд (100 секунд).

Еще одно, что нужно учитывать:

Чтобы указать время ожидания до истечения времени ожидания чтения или записи, используйте свойство ReadWriteTimeout.

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