當前位置:
首頁 > 最新 > 修復.NET的HttpClient

修復.NET的HttpClient

早在2016年我們就報道過 ,.NET的HttpClient存在一些問題。隨著.NET Core 2.1中HttpClientFactory的引入,其中部分問題已經得到緩解。

HttpClient的根本問題是,每次調用資源好像都應該在使用後立即釋放。在現實中,那意味著每個目標伺服器都要創建一次,然後在應用程序運行期間一直保留。除非是,比如說,需要清理DNS緩存。

新增的HttpClientFactory讓用戶可以在應用程序啟動時預先配置HttpClient。每項配置都有名稱,讓使用正確的配置請求HttpClient變得簡單。為了防止用戶不需要自定義配置,它也提供了未命名配置。

考慮到字元串容易出錯,HttpClient的配置可以指定為特定的類型。例如,用戶可以創建GitHubService類配置。然後,DI框架會確保為使用那個配置而非默認配置的HttpClient提供GitHubService實例。

這個管理HttpClient的新框架不會改變基本的使用規則:銷毀HttpClient仍然是危險的。對於DNS緩存問題,Karel Zikmund寫到:

我們正在積極地討論設計,以期直接在ManagedHandler中解決DNS變化問題。目前,我們正在考慮兩個選項:要麼支持DNS TTL(#24257),要麼是類似ConnectionLeaseTimeout這樣的API(#26331)。我們會結合2.1中的HttpClientFactory確保DNS變化的情況得到解決。

消息處理程序和自動重試

HttpClient有一個鮮為人知的特性是能夠添加消息處理程序。開箱即用,HttpClientHandler控制著諸如是否允許自動重定向(Cookie容器會用到)、預認證如何發揮作用這樣的特性。

通過實現DelegatingHandler的子類可以進一步擴展。在Channel 9的一個示例中,Daniel Roth展示了如何創建一個簡單的重試處理程序。

HttpClientFactory完善了這個特性,它允許開發人員將HttpClientHandler作為HttpClient配置的一部分。這是有意為DI提供便利。

SocketHttpHandler

HttpClientHandler子系統不只是為了改變行為,它還可以完全改變HttpClient與網路通信的方式。微軟正在通過引入SocketHttpHandler對此加以利用。這是一個「全新的託管HttpClientHandler」,可以消除對「libcurl (對於Linux)和WinHTTP(對於Windows)的平台依賴」。公告繼續寫到:

對於預覽版1,用戶可以通過下面兩種方式中的一種使用SocketHTTPHandler:

環境變數:COMPlus_UseManagedHttpClientHandler=true

AppContext:System.Net.Http.UseManagedHttpClientHandler=true

用戶也可以開啟ASP.NET的套接字模式。隨著當前原生實現的引入,這最終可能會成為默認設置。

原文:http://www.infoq.com/cn/news/2018/03/HttpClientFactory

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 dotNET跨平台 的精彩文章:

入門乾貨之用DVG打造你的項目主頁-Docfx、Vs、Github
【ASP.NET Core】處理異常

TAG:dotNET跨平台 |