Ошибка тайм-аута WebClient - PullRequest
0 голосов
/ 07 июня 2011

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

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;
    }
}

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

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

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

1 Ответ

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

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

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

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

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

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

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

...