Проблема тайм-аута WebClient - PullRequest
1 голос
/ 01 апреля 2011

Я читал, что WebClient не поддерживает тайм-аут, но я нахожу что-то странное. Мой класс WebClient:

class MyWebClient : WebClient
{
    private int timeout;

    public int Timeout
    {
        get { return timeout; }
        set { timeout = value; }
    }

    public MyWebClient()
    {
        timeout = 5000;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);

        if (request.GetType() == typeof(HttpWebRequest))
        {
            ((HttpWebRequest)request).Timeout = timeout;
        }

        Console.WriteLine("timeout {0}", request.Timeout);

        return request;
    }
}

Когда я делаю запрос, это печатает:
Тайм-аут 10000

когда я комментирую

//((HttpWebRequest)request).Timeout = timeout;

печатает:
Тайм-аут 100000

это нормально, значение по умолчанию

но когда я установил:

((HttpWebRequest)request).Timeout = 5000;

печатает:
Тайм-аут 5000

и таймауты работают

Кто-нибудь может объяснить, почему я должен ввести значение тайм-аута напрямую?

1 Ответ

2 голосов
/ 01 апреля 2011

WebRequest не будет знать, какой тайм-аут вы хотите использовать, если вы не установите его.

Возможно, вы путаете настройку локального поля вашего класса timeout с установкой свойства Timeout для класса WebRequest? Или вы ожидаете, что WebClient будет иметь свойство Timeout и автоматически установит для него время ожидания запроса?

Если вы не хотите устанавливать только свое собственное время ожидания для HTTP-запросов, вся проверка типа запроса не требуется, поскольку Timeout является частью базового класса WebRequest и поэтому доступен без преобразования к HttpWebRequest.

...