2011-04-01 101 views
1

我读了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工作

任何人能解释为什么我必须输入超时值直接?

+0

这不是一个关于WebRequest.Timeout的问题,而是C#中继承的工作原理。 – angularsen 2011-04-14 06:34:26

回答

2

WebRequest不知道你想使用什么超时,除非你设置它。

也许你正在混淆课程的本地字段timeout的设置,并在WebRequest类中设置了Timeout属性?或者您希望WebClient拥有Timeout属性并为您自动设置请求超时?

除非你只是想设置自己的超时HTTP请求,请求类型的整个检查是不必要的,因为TimeoutWebRequest基类的一部分,因此可不必强制转换为HttpWebRequest

+1

我很蠢。我在另一个函数中设置了wc.Timeout。问题解决了 – ekapek 2011-04-01 11:19:29