我创建了一个类如下。
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;
}
}
当我创建此类的对象时,它会创建一个webclient对象并将timeout
设置为-1,以便它等待无限时间响应。
但即使我将timeout
设置为-1,也会导致超时错误。
有解决方法吗?
答案 0 :(得分:3)
我知道你从哪里获得了-1
部分,但是在关于Timeout的MSDN文章中,它说它会抛出ArgumentOutOfRangeException
if:
指定的值小于零且不是无限。
默认值是100,000毫秒(100秒)。
还有一件事需要考虑:
要指定在读取或写入操作超时之前等待的时间,请使用 ReadWriteTimeout 属性。
域名系统(DNS)查询最多可能需要 15秒才能返回或超时。如果您的请求包含需要解析的主机名,并且您将Timeout设置为小于15秒的值,则可能需要15秒或更长时间才会抛出WebException以指示请求超时。