Dot-Net

如何以程式方式刪除 WebClient 中的 2 個連接限制

  • May 14, 2009

那些“好”的 RFC 要求每個 RFC 客戶端注意每個主機不要使用超過 2 個連接……

微軟在 WebClient 中實現了這一點。我知道它可以關閉

應用程序配置:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<system.net> 
 <connectionManagement> 
  <add address="*" maxconnection="100" /> 
 </connectionManagement> 
</system.net> 
</configuration> 

(可在<http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/1f863f20-09f9-49a5-8eee-17a89b591007>上找到)

但是我怎樣才能以程式方式做到這一點?

根據 <http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx>

“更改 DefaultConnectionLimit 屬性對現有 ServicePoint 對像沒有影響;它僅影響更改後初始化的 ServicePoint 對象。如果此屬性的值尚未直接或通過配置設置,則該值預設為常量 DefaultPersistentConnectionLimit。”

我希望最好在實例化 WebClient 時配置限制,但是在我的程序開始時以程式方式刪除這個可悲的限制也可以。

我訪問的伺服器不是網際網路上的正常網路伺服器,而是在我的控制下和本地區域網路中。我想做 API 呼叫,但我不使用網路服務或遠端處理

借助這里和其他地方的一些技巧,我設法通過覆蓋我正在使用的 WebClient 類在我的應用程序中解決了這個問題:

class AwesomeWebClient : WebClient {
   protected override WebRequest GetWebRequest(Uri address) {
       HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(address);
       req.ServicePoint.ConnectionLimit = 10;
       return (WebRequest)req;
   }
}

對於那些感興趣的人:

System.Net.ServicePointManager.DefaultConnectionLimit = x(其中 x 是您想要的連接數)

無需額外參考

只需確保在創建服務點之前呼叫它,如上文所述。

引用自:https://stackoverflow.com/questions/866350