首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServicePoint安全检查,防止在新的HttpWebRequests上阻塞

ServicePoint安全检查,防止在新的HttpWebRequests上阻塞
EN

Stack Overflow用户
提问于 2011-11-19 05:35:24
回答 1查看 1.7K关注 0票数 1

我使用的是一个第三方库,它可以进行大量的http调用。通过反编译代码,我已经确定它正在创建和使用原始的HttpWebRequest,所有这些都转到一个单独的HttpWebRequest。问题是一些请求没有正确关闭。一段时间后,当库对它们调用GetRequestStream()*时,所有新的ConnectionLimit将永远阻塞。我已经确定这种阻塞是由于特定主机的ServicePoint上的ServicePoint造成的,该主机的默认值为2。换句话说,该库打开了2个请求,然后尝试打开第三个请求,该请求阻塞了。

我想防止这种阻塞。该库具有相当的弹性,并且会重新连接自身,所以如果我删除它已建立的现有连接也没什么问题。问题是我无法访问这个库生成的任何HttpWebRequestHttpWebResponse。但是,我知道它访问的网址,因此我可以访问它的ServicePoint

代码语言:javascript
复制
var sp = ServicePointManager.FindServicePoint(new Uri("http://UrlThatIKnowAbout.com"));

(注意:在这些HttpWebRequests上启用了KeepAlive )

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-23 04:59:03

这起作用了,尽管我不确定这是解决问题的最好方法。

  1. 获取url的服务点对象

var sp = ServicePointManager.FindServicePoint(new Uri("http://UrlThatIKnowAbout.com"));

  • Increase the ConnectionLimit to int.MaxValue

  • 创建一个定期检查服务点上的ConnectionCount的后台线程。如果大于5,则调用CloseConnectionGroup()

  • Set MaxIdleTime to 1 hour (而不是默认值)

设置ConnectionLimit应防止阻塞。监视器线程将确保过多的连接永远不会同时处于活动状态。设置MaxIdleTime应该是一种后退。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8189468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档