关于timeout连接超时时间和ReadWriteTimeout读写超时时间的误解
导读部分
【HttpHelper万能框架】教程目录贴 http://www.sufeinet.com/thread-9989-1-1.html
【HttpHelper万能框架】源码购买帖 http://www.sufeinet.com/thread-9926-1-1.html
内容部分
关于这个问题其实我在群里说过几次了。但一直没有引起大家的关注
今天我发个帖子专门说明一下
其实这个是,作用域的问题。在HttpWebRequest中已经写的很明白了。只是有些程序员,对微软的说明理解不到位。
上面是这样写的
[C#] 纯文本查看 复制代码 //
// 摘要:
// 获取或设置 System.Net.HttpWebRequest.GetResponse() 和 System.Net.HttpWebRequest.GetRequestStream()
// 方法的超时值(以毫秒为单位)。
//
// 返回结果:
// 请求超时前等待的毫秒数。默认值是 100,000 毫秒(100 秒)。
//
// 异常:
// System.ArgumentOutOfRangeException:
// 指定的值小于零,并且不为 System.Threading.Timeout.Infinite。
public override int Timeout { get; set; }
timeout的作用域是控制与目标服务器建立连接的超时时间,也就是说,当我们和服务器能在规定的timeout时间内建立tcp连接,便不会异常,而后,页面数据的下载很慢的过程不在timeout的范围内。也就是说只有连接上了就和timeout没关系了,他只控制连接时间
如果要控制写入和读取时的超时时间应该是设置这个ReadWriteTimeout属性。
看说明
[C#] 纯文本查看 复制代码 //
// 摘要:
// 获取或设置写入或读取流时的超时(以毫秒为单位)。
//
// 返回结果:
// 在写入超时或读取超时之前的毫秒数。默认值为 300,000 毫秒(5 分钟)。
//
// 异常:
// System.InvalidOperationException:
// 已发送请求。
//
// System.ArgumentOutOfRangeException:
// 为 Set 操作指定的值小于等于零,并且不等于 System.Threading.Timeout.Infinite
public int ReadWriteTimeout { get; set; }
也就是说你想让请求整个过程受你控制,你需要设置这两个超时时间,而不是单纯的前者,更不能认为Timeout是通吃的。
好了这个问题就说到这里,大家还有不明白的请回复本帖子。
|