3

我曾經使用HttpWebRequest.ServicePoint.ConnectionLimit(http://msdn.microsoft.com/en-us/library/system.net.servicepoint.connectionlimit(v=vs.110).aspx)來配置客戶端打開的TCP連接數。如何使用dotnet(nugget package)httpclient配置TCP連接的數量?

我打算爲我的新應用程序使用HttpCLient。但是我找不到上的相關信息如何配置TCP連接數。我認爲它會通過webrequesthandlerhttp://msdn.microsoft.com/en-us/library/system.net.http.webrequesthandler.aspxAllowing Untrusted SSL Certificates with HttpClient)中的一個屬性暴露出來,但我無法找到它。看起來它無法通過自定義HttpClient的消息處理程序進行配置,以及(http://www.asp.net/web-api/overview/advanced/httpclient-message-handlers

問:

如何配置數量的TCP(持續)連接?

更新1:

看起來它不通過HttpClient的暴露(通過ILSpy分析代碼之後)。但是,看起來像我可以使用ServicePointManager的FindServicePoint方法。任何人都可以確認這是否應該走 - 通過找到我的uri服務點並設置連接限制?

public static ServicePoint FindServicePoint(Uri address) 
{ 
    return ServicePointManager.FindServicePoint(address, null); 
} 

更新2:

事實上,看起來就是去爲HttpWebRequest.ServicePoint內部被調用的方法相同的方式。下面是來自ILSpy的相應代碼片段 - 但是有很多servicepointmanager.findservicepoint(..)重載方法 - 挑選正確的方法可能會非常棘手。

Monitor.Enter(this, ref flag); 
      if (this._ServicePoint == null || forceFind) 
      { 
       if (!this.ProxySet) 
       { 
        this._Proxy = WebRequest.InternalDefaultWebProxy; 
       } 
       if (this._ProxyChain != null) 
       { 
        this._ProxyChain.Dispose(); 
       } 
       this._ServicePoint = ServicePointManager.FindServicePoint(this._Uri, this._Proxy, out this._ProxyChain, ref this._AbortDelegate, ref this.m_Aborted); 
       if (Logging.On) 
       { 
        Logging.Associate(Logging.Web, this, this._ServicePoint); 
       } 
      } 

注:我不想使用ServicePointManager。 DefaultConnectionLimit作爲其全局。我正在尋找與httpwebrequest.servicepoint.connectionlimit相關的內容,該地址是本地至每個服務點(主機)的請求和效果。

問候。

+0

是的全局值影響HttpClient。你爲什麼不想使用ServicePointManager.DefaultConnectionLimit? – 2014-09-06 01:20:33

+0

@Darell,感謝您的確認(順便說一句,我已經通過ILSpy上週查看了代碼以確認相同 - 現在從qtn中刪除該語句以避免不相關的信息)。我不想使用ServicePointMnager.Defaultconnectionlimit,因爲它具有全局影響。我的應用程序與多個服務進行會談 - 因此想要在每個服務點本地控制服務點(就像httpwebrequest.servicepoint一樣)。但是,這不是一個交易斷路器 - 因爲我可以使用FindServicePoint(...)方法。 – Dreamer 2014-09-07 03:12:30

回答