Dot-Net
如何以程式方式刪除 WebClient 中的 2 個連接限制
那些“好”的 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 是您想要的連接數)無需額外參考
只需確保在創建服務點之前呼叫它,如上文所述。