我正在使用一个 3rd 方库,它可以进行许多 http 调用。通过反编译代码,我确定它正在创建和使用 raw HttpWebRequest
,所有这些都指向一个 URL。问题是某些请求没有正确关闭。一段时间后,HttpWebRequest
当库对它们调用 GetRequestStream()* 时,所有 new 都会永远阻塞。我已经确定此阻塞是由于该特定主机的 ServicePoint 上的 ConnectionLimit,其默认值为 2。换句话说,该库已打开 2 个请求,然后尝试打开第 3 个请求,这会阻塞。
我想防止这种阻塞。该库具有相当的弹性,并且会自行重新连接,因此如果我终止它已建立的现有连接也没关系。问题是我无权访问这个库制作的HttpWebRequest
任何东西。HttpWebResponse
但是我确实知道它访问的 URL,因此我可以访问ServicePoint
它。
var sp = ServicePointManager.FindServicePoint(new Uri("http://UrlThatIKnowAbout.com"));
(注意:在这些 HttpWebRequests 上启用了 KeepAlive)