为了账号安全,请及时绑定邮箱和手机立即绑定

在C#中调整HttpWebRequest连接超时

在C#中调整HttpWebRequest连接超时

C#
慕少森 2019-12-12 14:10:03
我相信经过长时间的研究和搜索,我发现通过建立异步连接并在所需的超时后终止连接,可能可以更好地实现我想做的事情。但是无论如何,我会继续询问!快速的代码片段:HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(url);webReq.Timeout = 5000;HttpWebResponse response = (HttpWebResponse)webReq.GetResponse(); // this takes ~20+ sec on servers that aren't on the proper port, etc.我有一个HttpWebRequest在多线程应用程序中的方法,其中我正在连接到大量公司的Web服务器。在服务器没有响应的情况下HttpWebRequest.GetResponse(),即使我已指定仅5秒的超时时间,该超时仍需20秒左右。为了定期访问服务器,我想跳过连接时间超过5秒的服务器。所以问题是:“是否有一种简单的方法为WebRequest或HttpWebRequest指定/减少连接超时?”
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

我认为问题在于,WebRequest仅在实际发出请求之后才测量时间。如果您向同一个地址提交多个请求,则ServicePointManager将会限制您的请求,并且实际上仅提交与之对应的并发连接数ServicePoint.ConnectionLimit,默认情况下,该并发连接从的值中获取相应的值ServicePointManager.DefaultConnectionLimit。应用程序CLR主机将此设置为2,ASP主机设置为10。因此,如果您有一个多线程应用程序将多个请求提交到同一主机,则实际上只有两个处于联机状态,其余的则排队。


我尚未对此进行研究以得出确凿的证据,是否确实发生过这种情况,但是在类似的项目中,直到我取消ServicePoint限制后,我的情况才令人恐怖。


要考虑的另一个因素是DNS查找时间。同样,我相信没有确凿的证据支持,但我认为WebRequest不会不计入请求超时的DNS查找时间。在某些部署中,DNS查找时间可能会显示为非常大的时间因素。


是的,你必须围绕代码的应用程序WebRequest.BeginGetRequestStream(用于POSTs的内容)和WebRequest.BeginGetResponse(对于GET小号和 POSTS S)。同步调用不会扩展(我不会详细说明为什么,但是我确实有确凿的证据)。无论如何,ServicePoint问题与此正交:排队行为也发生在异步调用中。



查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 358 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信