我使用作爲自託管進程運行的Web API創建了REST資源。出於性能原因,我希望能夠使用持久HTTP連接來調用它。我使用OWIN自託管。是否可以使用System.Net.Http.HttpClient的持久連接?
我真的很喜歡在System.Net.Http.HttpClient中的GET,POST,PUT,DELETE的asnyc方法。他們很容易調用和處理 - 他們返回一個System.Threading.Tasks.Task,這對我正在嘗試做的事很方便。我更喜歡使用HttpClient來System.Net.HttpWebRequest。
我可能錯過了一些東西,但對於我如何創建與HttpClient的持久連接並不明顯。我正在挖掘System.Net.Http.HttpClientHandler和System.Net.Http.WebRequestHandler類,但到目前爲止我還沒有找到持久連接的選項。 Google會發現使用HttpWebRequest創建持久連接的各種示例。它具有可以設置爲true的KeepAlive屬性。有沒有辦法使用HttpClient設置?
MSDN documentation for HttpClient:
默認情況下,HttpWebRequest的將被用來發送請求到服務器。通過在以HttpMessageHandler實例爲參數的構造函數重載之一中指定不同的通道,可以修改此行爲。如果需要身份驗證或緩存等功能,則可以使用WebRequestHandler配置設置,並將實例傳遞給構造函數。可以將返回的處理程序傳遞給構造函數重載之一,並使用HttpMessageHandler參數。
有沒有辦法在底層HttpWebRequest上設置KeepAlive功能?
MSDN文檔還說:
HttpClient的類實例作爲一個會話來發送HTTP請求。 HttpClient實例是應用於該實例執行的所有請求的一組設置。另外,每個HttpClient實例都使用自己的連接池,將其請求與其他HttpClient實例執行的請求隔離開來。
我可以從中瞭解到,當獲得性能優勢時,連接池將使用持久連接爲我優化?如果我只想從我的客戶那裏獲得單一連接,該怎麼辦?
嗨吧!你最終發現它是否可能? – vtortola
自從我看了這個已經有一段時間了。據我所知,這是不可能的。我嘗試了很多東西,但不管我嘗試了什麼,http。系統在120秒後終止了我的連接,因爲它沒有流量。我從來沒有找到一種方法在.NET層配置連接,以便用HTTP KeepAlive或其他任何方法來修改這種低級行爲。我很樂意讓某人答案。 – petrsnd
夠公平的。謝謝。 – vtortola