為 UWP 應用提供的 .NET 網路 API
【編者按】本文作者是 Windows networking 團隊專案經理 Sidharth Nabar。在微軟 Build 2015 大會上,.NET Core 5 作為開發 UWP(Universal Windows Platform)應用的最新 .NET 版本正式釋出,本文系 OneAPM 工程師編譯整理。
.NET Core 5 中的一系列網路 API 是由 Win 8.1 版 Windows Store 應用開發者使用的 API 演進而來的(點此檢視 MSDN API參考指南)。正如會上所強調的,將 App 移植到 .NET Core 和 UWP 上,意味著開發者可以使用相同的程式碼庫在 Xbox、 Windows Phone、Windows 和 HoloLens 等平臺實現同一應用。當然,你仍可以使用 Windows 8.1 應用商店中的全部 .NET 網路 API(外部 API 不存在被刪除或棄用的狀況)。
如果比較 .NET Framework 與 .NET Core,我們會發現:儘管 .NET Core 中的大部分外部 API 與之前 .NET Framework 版的相同,但這些 API 的底層實現已經發生了顯著變化,我們也通過此次版本迭代實現了網路 API 部署的現代化 ,使之更適用於 Windows 應用商店中的 App。在本文中,我們會列舉 UWP 開發人員可用的全部 .NET 網路 API,並介紹其實現原理。
請注意:本文所討論的 API 及其變化僅適用於開發 UWP App 的 .NET Core,並不適用於 .NET Framework 4.6 版本。我們同樣致力於優化 .NET Core 網路 API 以更好地支援伺服器平臺(如 ASP .NET 5),這些內容將在另一篇部落格中單獨介紹。同樣,本文也不會介紹 Windows 應用開發者不可用的 .NET 網路 API。
新的內容
以下為 .NET Core 5中為 UWP 應用開發者新加的 API 與功能。
System.Net.Sockets
在 Windows 10 和 .NET Core 5 中,System.Net.Sockets
被新增到用於 UWP 應用開發的 API Surface 中。這是 Windows Store 應用期待已久的API( Windows Phone Silverlight 應用程式早已使用了此介面),它包含了System.Net.Sockets.Socket
和System.Net.Sockets.SocketAsyncEventArgs
之類的變數,可用於非同步套接字通訊開發。在 .NET Core 中,System.Net.Sockets
現有的 API Surface 基於 Phone 8.1 Silverlight 中的 API,並繼續支援大多數的型別、屬性和方法(刪除了一些被認為已經過時APIs)。展望未來,我們計劃擴大 API Surface 以支援該名稱空間下的更多型別--請參考下面的展望部分。
System.Net.Sockets
API 的實現方式已經顯著改變,以便消除對不屬於 .NET Core 的 API 的依賴,同時使用與 WinRT API 一樣的底層執行緒 API。我們的目標是確保舊版的部署與新版 .NET Core 間的功能對等。如果你在移植 Sockets 程式碼到 UWP 時出現任何步驟或者效能上的差異,請在GitHub及時向我們反饋。
System.Net.Http 得到 HTTP/2 支援
開發者在Windows 10或.NET Core 5上編寫 UWP 應用時,在使用System.Net.Http.HttpClient
時可獲取 HTTP/2 協議支援。HTTP/2 是 HTTP 協議的最新版本,通過最小化連線和往返資訊的數量提供了低延遲的網路訪問方式。在 HttpClient
API 中使用該協議意味著伺服器響應更快,應用程式在相同的網速下執行更加流暢。最棒的是——該功能預設生效的,無需對程式碼做任何改動即可使用之。瞭解 HTTP/2 實現 App 更快網路訪問的細節,請參考 Build 2015 會上的演講。該演講還演示了一個圖片下載的簡單應用,在切換到 HTTP/2 後達到200%的延遲提升(demo視訊)。
下面一段程式碼顯示瞭如何查詢客戶端的 HTTP 版本偏好以及實際用於連線的 HTTP 版本:
var myClient = new HttpClient();
var myRequest = new HttpRequestMessage(HttpMethod.Get, "http://www.contoso.com");
// This property represents the client preference for the HTTP protocol version.
// The default value for UWP apps is 2.0.
Debug.WriteLine(myRequest.Version.ToString());
var response = await myClient.SendAsync(myRequest);
// This tells if you if the client-server communication is actually using HTTP/2
Debug.WriteLine(response.Version.ToString());
註釋:
其他 .NET 平臺並不支援將
Request.Version
屬性值設定為2.0,當該請求發出時會丟擲System.ArgumentException
異常。除 UWP 外的其他 .NET 平臺預設版本為1.1。Request.Version
屬性表示客戶端 API 優先使用 HTTP/2 協議。實際使用的HTTP 版本取決於客戶端作業系統、伺服器和中間代理。HTTP/2 是一個協商協議,如果伺服器或者中間代理不支援該協議,將會回退為 HTTP 1.1 版本。
改動的內容
在這一節中,我們將回顧 Windows Store開發人員之前使用過的 API,在新版中起底層實現已經發生了顯著變化。理解這些變化將會幫助你以一個開發者的視角,洞悉應用程式從 Windows 8.1 Store App 移植到 Windows 10 UWP 的過程中發生的程式碼改動。
System.Net.Http
在 Windows 8.1 中, HttpClient
的實現基於 HTTP 協議棧,其包括的型別有System.Net.HttpWebRequest
和System.Net.ServicePointManager
等。在 .NET Core 中,該部分由全新的、輕量級包裝類替代,後者基於原生 Windows OS HTTP 元件,例如基於 WinINet的Windows.Web.Http
。因此,我們能夠利用作業系統的最新功能(例如:HTTP/2),同時以更快的速度將這些新功能提供給 .NET 開發人員。此外,執行在 Windows 10 上的 .NET 應用在記憶體消耗更低,使用者在執行多個應用時也能獲得更為流暢的體驗。此文件所記錄的 System.Net.Http 中的可用 API 集保持不變。
新的實現方案已經通過測試以確保與之前 Windows 8.1 的實現功能對等,所以開發人員在將 HTTP 客戶端程式碼移植到 UWP 時,API 行為不會有任何差異。然而,如果你發現任何問題或者 Bug 時,請在GitHub上提交給我們。
System.Net.Requests
System.Net.Requests
庫包括 與System.Net.HttpWebRequest
、 System.Net.HttpWebResponse
類相關的型別,開發人員可以利用這些型別實現 HTTP協議的客戶端功能。.NET Core 5 的 API Surface 與適用於 Windows 8.1 應用的 API 一致,這些介面相比於 .NET Framework 的外部介面限制更多。這是有意設定的,我們強烈建議大家使用 HttpClient API--這是我們將會集中精力,創新前進的方向。 .NET Core 5 的其他部分,諸如 Windows Communication Foundation (WCF)也已經遷移到 .NET Cores 實現的 HttpClient,點選此處檢視概述。
提供該庫的目的是保證向後相容性,讓使用舊 API 的 .NET 庫也能使用。對 .NET Core來說,HttpWebRequest
的部署實際上基於HttpClient
(與 .NET Framework中的依賴順序相反)。正如前文所述,這樣做是為了避免在 UWP 應用開發語境中使用受管理的 .NET HTTP 堆疊,同時將HttpClient
轉變單個 HTTP 客戶端的 API。
不變的內容
Windows 8.1 Store 應用支援的 System.Net
和System.Net.NetworkInformation
名稱空間中的其他型別在 UWP 應用依舊可用。這些 API Surface 有少量新增項,但其實現方式並沒有大的變化。
展望未來
本文,我們討論了為 Windows 10 UWP 應用開發人員提供的首版 .NET 網路 API。我們將繼續完善這些介面、加入新的外部API,以確保開發人員能夠使用 .NET 編寫豐富、功能齊全的 UWP 應用程式。
為了確保我們優先開發的重點 API 是大眾所需的,請讓我們知道你的反饋--請及時告訴我們 .NET Core 中遺漏的 API,以及在使用 UWP 應用時影響你體驗的因素。請在GitHub上建立或投票表決Windows platform missing APIs uservoice ,也可以留下您的問題。我們期待與您合作來開發相容性更好的優質應用。
原文連結:http://blogs.msdn.com/b/dotnet/archive/2015/07/28/net-networking-apis-for-uwp-apps.aspx
OneAPM 助您輕鬆鎖定 .NET 應用效能瓶頸,通過強大的 Trace 記錄逐層分析,直至鎖定行級問題程式碼。以使用者角度展示系統響應速度,以地域和瀏覽器維度統計使用者使用情況。想閱讀更多技術文章,請訪問 OneAPM 官方部落格。
相關文章
- UWP 透過 .NET 9 和Native AOT 的支援實現 UWP 應用的現代化
- 為Windows 10 UWP 應用設定代理Windows
- IoC在ASP.NET Web API中的應用ASP.NETWebAPI
- 企業工商大資料API在網際網路行業的應用大資料API行業
- API閘道器為K8s容器應用叢集提供強大的接入能力APIK8S
- 微軟宣佈Win10 UWP API可用於Win32應用程式微軟Win10APIWin32
- 【XInput】手柄模擬滑鼠運作之 .NET P/Invoke 和 UWP-API 方案XInputAPI
- 工業網際網路為製造業提供新跳板
- Tetrate提供融合API閘道器WAF和服務網格功能與開箱即用的API治理功能的應用連線平臺API
- 整合鐵電儲存器MCU為物聯網應用提供出色效能
- mongoDB在網際網路金融的應用MongoDB
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- 網際網路下外網代理IP的應用
- SSL數字證書為網際網路提供加密傳輸通道加密
- 代理伺服器 ip為網際網路提供什麼服務?伺服器
- 數商雲網際網路採購解決方案丨為供應商管理提供了新的技術手段
- IP定位的具體網路應用
- 舞臺LED螢幕的應用為舞美演出提供了什麼
- 為什麼你應該放棄React老的Context API用新的Context APIReactContextAPI
- 用Serverless Kubernetes為.NET (Core)應用保駕護航Server
- golang RPC 應用(1) :net/rpc的應用GolangRPC
- .NET雲原生應用實踐(二):Sticker微服務RESTful API的實現微服務RESTAPI
- 氣象資料隨時隨地:讓天氣預報API為您的應用提供精準的天氣資訊API
- PON網路應用場景
- 快來為你的 .NET 應用加個監控吧!
- web前端是否應該信任後端API提供的資料?Web前端後端API
- 微軟為Win10照片UWP應用推送更新:接收通知的控制權交給使用者微軟Win10
- 使用JavaScript和網路資訊API進行自適應網路服務JavaScriptAPI
- win10怎麼將UWP應用安裝在非系統盤_win10將UWP應用安裝在非系統盤的步驟Win10
- 網路安全的應用領域有哪些?
- 華為網路裝置租賃 提供現場搭建網路 臨時WiFi 萬人可用WiFi
- 無人機配聚合路由器提供應急網路保障無人機路由器
- HMS Core網路加速套件:hQUIC Kit為應用快速建立網路連線套件UI
- 為什麼應用安全應該成為金融服務提供商的重點關注問題?
- 使用 Moq 測試.NET Core 應用 -- Mock 行為Mock
- 如何用Deeplink為快應用提供多個快速直達入口
- Reddit創始人稱加密貨幣可以“為潛在的新型網際網路提供助力”加密
- 網站上的第三方指令碼為網路攻擊者提供攻擊媒介網站指令碼
- “網際網路+”在醫療行業中的應用行業