WebClient超时问题

时间:2011-04-01 11:07:21

标签: c# webclient

我读到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

和timouts工作

有人可以解释为什么我必须直接输入超时值吗?

1 个答案:

答案 0 :(得分:2)

WebRequest除非您进行设置,否则无法知道您要使用的超时时间。

也许您在设置timeout类的Timeout属性时,会混淆班级本地字段WebRequest的设置?或者您希望WebClient具有Timeout属性并自动为您设置请求超时?

除非您只想为HTTP请求设置自己的超时,否则不需要对请求类型进行全部检查,因为TimeoutWebRequest基类的一部分,因此可以在没有强制转换的情况下使用HttpWebRequest