為 UWP 應(yīng)用提供的 .NET 網(wǎng)絡(luò) API

【編者按】本文作者是 Windows networking 團隊項目經(jīng)理 Sidharth Nabar棒拂。在微軟 Build 2015 大會上伞梯,.NET Core 5 作為開發(fā) UWP(Universal Windows Platform)應(yīng)用的最新 .NET 版本正式發(fā)布,本文系 OneAPM 工程師編譯整理帚屉。

.NET Core 5 中的一系列網(wǎng)絡(luò) API 是由 Win 8.1 版 Windows Store 應(yīng)用開發(fā)者使用的 API 演進而來的(點此查看 MSDN API參考指南)谜诫。正如會上所強調(diào)的,將 App 移植到 .NET Core 和 UWP 上攻旦,意味著開發(fā)者可以使用相同的代碼庫在 Xbox喻旷、 Windows Phone、Windows 和 HoloLens 等平臺實現(xiàn)同一應(yīng)用牢屋。當(dāng)然且预,你仍可以使用 Windows 8.1 應(yīng)用商店中的全部 .NET 網(wǎng)絡(luò) API(外部 API 不存在被刪除或棄用的狀況)槽袄。

如果比較 .NET Framework 與 .NET Core,我們會發(fā)現(xiàn):盡管 .NET Core 中的大部分外部 API 與之前 .NET Framework 版的相同锋谐,但這些 API 的底層實現(xiàn)已經(jīng)發(fā)生了顯著變化遍尺,我們也通過此次版本迭代實現(xiàn)了網(wǎng)絡(luò) API 部署的現(xiàn)代化 ,使之更適用于 Windows 應(yīng)用商店中的 App涮拗。在本文中乾戏,我們會列舉 UWP 開發(fā)人員可用的全部 .NET 網(wǎng)絡(luò) API,并介紹其實現(xiàn)原理三热。

請注意:本文所討論的 API 及其變化僅適用于開發(fā) UWP App 的 .NET Core鼓择,并不適用于 .NET Framework 4.6 版本。我們同樣致力于優(yōu)化 .NET Core 網(wǎng)絡(luò) API 以更好地支持服務(wù)器平臺(如 ASP .NET 5)康铭,這些內(nèi)容將在另一篇博客中單獨介紹惯退。同樣,本文也不會介紹 Windows 應(yīng)用開發(fā)者不可用的 .NET 網(wǎng)絡(luò) API从藤。

新的內(nèi)容

以下為 .NET Core 5中為 UWP 應(yīng)用開發(fā)者新加的 API 與功能催跪。

System.Net.Sockets

在 Windows 10 和 .NET Core 5 中,System.Net.Sockets 被添加到用于 UWP 應(yīng)用開發(fā)的 API Surface 中夷野。這是 Windows Store 應(yīng)用期待已久的API( Windows Phone Silverlight 應(yīng)用程序早已使用了此接口)懊蒸,它包含了System.Net.Sockets.SocketSystem.Net.Sockets.SocketAsyncEventArgs之類的變量,可用于異步套接字通信開發(fā)悯搔。在 .NET Core 中骑丸,System.Net.Sockets現(xiàn)有的 API Surface 基于 Phone 8.1 Silverlight 中的 API,并繼續(xù)支持大多數(shù)的類型妒貌、屬性和方法(刪除了一些被認為已經(jīng)過時APIs)通危。展望未來,我們計劃擴大 API Surface 以支持該命名空間下的更多類型--請參考下面的展望部分灌曙。

System.Net.Sockets API 的實現(xiàn)方式已經(jīng)顯著改變菊碟,以便消除對不屬于 .NET Core 的 API 的依賴,同時使用與 WinRT API 一樣的底層線程 API在刺。我們的目標是確保舊版的部署與新版 .NET Core 間的功能對等逆害。如果你在移植 Sockets 代碼到 UWP 時出現(xiàn)任何步驟或者性能上的差異,請在GitHub及時向我們反饋蚣驼。

System.Net.Http 得到 HTTP/2 支持

開發(fā)者在Windows 10或.NET Core 5上編寫 UWP 應(yīng)用時魄幕,在使用System.Net.Http.HttpClient時可獲取 HTTP/2 協(xié)議支持。HTTP/2 是 HTTP 協(xié)議的最新版本颖杏,通過最小化連接和往返信息的數(shù)量提供了低延遲的網(wǎng)絡(luò)訪問方式纯陨。在 HttpClientAPI 中使用該協(xié)議意味著服務(wù)器響應(yīng)更快,應(yīng)用程序在相同的網(wǎng)速下運行更加流暢。最棒的是——該功能默認生效的队丝,無需對代碼做任何改動即可使用之靡馁。了解 HTTP/2 實現(xiàn) App 更快網(wǎng)絡(luò)訪問的細節(jié),請參考 Build 2015 會上的演講机久。該演講還演示了一個圖片下載的簡單應(yīng)用臭墨,在切換到 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());

注釋:

  1. 其他 .NET 平臺并不支持將Request.Version屬性值設(shè)置為2.0膘盖,當(dāng)該請求發(fā)出時會拋出System.ArgumentException異常胧弛。除 UWP 外的其他 .NET 平臺默認版本為1.1。

  2. Request.Version屬性表示客戶端 API 優(yōu)先使用 HTTP/2 協(xié)議侠畔。實際使用的HTTP 版本取決于客戶端操作系統(tǒng)结缚、服務(wù)器和中間代理。HTTP/2 是一個協(xié)商協(xié)議软棺,如果服務(wù)器或者中間代理不支持該協(xié)議红竭,將會回退為 HTTP 1.1 版本。

改動的內(nèi)容

在這一節(jié)中喘落,我們將回顧 Windows Store開發(fā)人員之前使用過的 API茵宪,在新版中起底層實現(xiàn)已經(jīng)發(fā)生了顯著變化。理解這些變化將會幫助你以一個開發(fā)者的視角瘦棋,洞悉應(yīng)用程序從 Windows 8.1 Store App 移植到 Windows 10 UWP 的過程中發(fā)生的代碼改動稀火。

System.Net.Http

在 Windows 8.1 中, HttpClient的實現(xiàn)基于 HTTP 協(xié)議棧赌朋,其包括的類型有System.Net.HttpWebRequestSystem.Net.ServicePointManager等凰狞。在 .NET Core 中,該部分由全新的沛慢、輕量級包裝類替代赡若,后者基于原生 Windows OS HTTP 組件,例如基于 WinINetWindows.Web.Http团甲。因此斩熊,我們能夠利用操作系統(tǒng)的最新功能(例如:HTTP/2),同時以更快的速度將這些新功能提供給 .NET 開發(fā)人員伐庭。此外,運行在 Windows 10 上的 .NET 應(yīng)用在內(nèi)存消耗更低分冈,用戶在運行多個應(yīng)用時也能獲得更為流暢的體驗圾另。此文檔所記錄的 System.Net.Http 中的可用 API 集保持不變。

新的實現(xiàn)方案已經(jīng)通過測試以確保與之前 Windows 8.1 的實現(xiàn)功能對等雕沉,所以開發(fā)人員在將 HTTP 客戶端代碼移植到 UWP 時集乔,API 行為不會有任何差異。然而,如果你發(fā)現(xiàn)任何問題或者 Bug 時扰路,請在GitHub上提交給我們尤溜。

System.Net.Requests

System.Net.Requests庫包括 與System.Net.HttpWebRequestSystem.Net.HttpWebResponse類相關(guān)的類型汗唱,開發(fā)人員可以利用這些類型實現(xiàn) HTTP協(xié)議的客戶端功能宫莱。.NET Core 5 的 API Surface 與適用于 Windows 8.1 應(yīng)用的 API 一致,這些接口相比于 .NET Framework 的外部接口限制更多哩罪。這是有意設(shè)置的授霸,我們強烈建議大家使用 HttpClient API--這是我們將會集中精力,創(chuàng)新前進的方向际插。 .NET Core 5 的其他部分碘耳,諸如 Windows Communication Foundation (WCF)也已經(jīng)遷移到 .NET Cores 實現(xiàn)的 HttpClient,點擊此處查看概述框弛。

提供該庫的目的是保證向后兼容性辛辨,讓使用舊 API 的 .NET 庫也能使用。對 .NET Core來說瑟枫,HttpWebRequest的部署實際上基于HttpClient(與 .NET Framework中的依賴順序相反)斗搞。正如前文所述,這樣做是為了避免在 UWP 應(yīng)用開發(fā)語境中使用受管理的 .NET HTTP 堆棧力奋,同時將HttpClient轉(zhuǎn)變單個 HTTP 客戶端的 API榜旦。

不變的內(nèi)容

Windows 8.1 Store 應(yīng)用支持的 System.NetSystem.Net.NetworkInformation命名空間中的其他類型在 UWP 應(yīng)用依舊可用。這些 API Surface 有少量添加項景殷,但其實現(xiàn)方式并沒有大的變化溅呢。

展望未來

本文,我們討論了為 Windows 10 UWP 應(yīng)用開發(fā)人員提供的首版 .NET 網(wǎng)絡(luò) API猿挚。我們將繼續(xù)完善這些接口咐旧、加入新的外部API,以確保開發(fā)人員能夠使用 .NET 編寫豐富绩蜻、功能齊全的 UWP 應(yīng)用程序铣墨。

為了確保我們優(yōu)先開發(fā)的重點 API 是大眾所需的,請讓我們知道你的反饋--請及時告訴我們 .NET Core 中遺漏的 API办绝,以及在使用 UWP 應(yīng)用時影響你體驗的因素伊约。請在GitHub上創(chuàng)建或投票表決Windows platform missing APIs uservoice ,也可以留下您的問題孕蝉。我們期待與您合作來開發(fā)兼容性更好的優(yōu)質(zhì)應(yīng)用屡律。

原文鏈接:http://blogs.msdn.com/b/dotnet/archive/2015/07/28/net-networking-apis-for-uwp-apps.aspx

OneAPM 助您輕松鎖定 .NET 應(yīng)用性能瓶頸,通過強大的 Trace 記錄逐層分析降淮,直至鎖定行級問題代碼超埋。以用戶角度展示系統(tǒng)響應(yīng)速度,以地域和瀏覽器維度統(tǒng)計用戶使用情況。想閱讀更多技術(shù)文章霍殴,請訪問 OneAPM 官方博客媒惕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市来庭,隨后出現(xiàn)的幾起案子妒蔚,更是在濱河造成了極大的恐慌,老刑警劉巖巾腕,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件面睛,死亡現(xiàn)場離奇詭異,居然都是意外死亡尊搬,警方通過查閱死者的電腦和手機叁鉴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佛寿,“玉大人幌墓,你說我怎么就攤上這事〖叫海” “怎么了常侣?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弹渔。 經(jīng)常有香客問我胳施,道長,這世上最難降的妖魔是什么肢专? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任舞肆,我火速辦了婚禮,結(jié)果婚禮上博杖,老公的妹妹穿的比我還像新娘椿胯。我一直安慰自己,他們只是感情好剃根,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布哩盲。 她就那樣靜靜地躺著,像睡著了一般狈醉。 火紅的嫁衣襯著肌膚如雪廉油。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天苗傅,我揣著相機與錄音抒线,去河邊找鬼。 笑死金吗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摇庙,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼旱物,長吁一口氣:“原來是場噩夢啊……” “哼澈圈!你這毒婦竟也來了陆错?” 一聲冷哼從身側(cè)響起淆珊,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤捌臊,失蹤者是張志新(化名)和其女友劉穎宇驾,沒想到半個月后噪沙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體次哈,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡螺捐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年码秉,在試婚紗的時候發(fā)現(xiàn)自己被綠了逮矛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡转砖,死狀恐怖须鼎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情府蔗,我是刑警寧澤晋控,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站姓赤,受9級特大地震影響赡译,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜不铆,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一蝌焚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狂男,春花似錦综看、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泡垃,卻和暖如春析珊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蔑穴。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工忠寻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人存和。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓奕剃,卻偏偏與公主長得像衷旅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纵朋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容