我读到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 :(得分:2)
WebRequest
除非您进行设置,否则无法知道您要使用的超时时间。
也许您在设置timeout
类的Timeout
属性时,会混淆班级本地字段WebRequest
的设置?或者您希望WebClient
具有Timeout
属性并自动为您设置请求超时?
除非您只想为HTTP请求设置自己的超时,否则不需要对请求类型进行全部检查,因为Timeout
是WebRequest
基类的一部分,因此可以在没有强制转换的情况下使用HttpWebRequest
。