我曾經使用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連接數。我認爲它會通過webrequesthandler(http://msdn.microsoft.com/en-us/library/system.net.http.webrequesthandler.aspx,Allowing 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相關的內容,該地址是本地至每個服務點(主機)的請求和效果。
問候。
是的全局值影響HttpClient。你爲什麼不想使用ServicePointManager.DefaultConnectionLimit? – 2014-09-06 01:20:33
@Darell,感謝您的確認(順便說一句,我已經通過ILSpy上週查看了代碼以確認相同 - 現在從qtn中刪除該語句以避免不相關的信息)。我不想使用ServicePointMnager.Defaultconnectionlimit,因爲它具有全局影響。我的應用程序與多個服務進行會談 - 因此想要在每個服務點本地控制服務點(就像httpwebrequest.servicepoint一樣)。但是,這不是一個交易斷路器 - 因爲我可以使用FindServicePoint(...)方法。 – Dreamer 2014-09-07 03:12:30