资讯专栏INFORMATION COLUMN

为 UWP 应用提供的 .NET 网络 API

A Loity / 3153人阅读

摘要:同样,本文也不会介绍应用开发者不可用的网络。是协议的最新版本,通过最小化连接和往返信息的数量提供了低延迟的网络访问方式。展望未来本文,我们讨论了为应用开发人员提供的首版网络。

【编者按】本文作者是 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.SocketSystem.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.HttpWebRequestSystem.Net.ServicePointManager等。在 .NET Core 中,该部分由全新的、轻量级包装类替代,后者基于原生 Windows OS HTTP 组件,例如基于 WinINet.aspx)的 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.HttpWebRequestSystem.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.NetSystem.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 官方博客。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110418.html

相关文章

  • 使用 .NET 平台,如何玩转 Universal Windows 应用

    摘要:开发人员经常设计自适应的以便其适应于不同设备不同形式。,目前库包括和,两者之前均不适用手机应用程序。快尝试下吧当处于模式中,应用程序通过新编辑器编译。例如在电脑桌面上,我的应用程序及其美观,但是在手机界面上,它仅仅显示状态栏。 2015年7月30日 本文作者是 Managed Languages 团队项目经理 Lucian Wischik。 不久前,Visual Studio 2015...

    NickZhou 评论0 收藏0
  • .NET Core

    摘要:的源码放在上,由微软官方和社区共同支持。不过微软在其开发平台使用了,并且利用技术将其性能提升至十分接近原生码的速度。跨平台是微软推出的最新的跨平台的框架,用它可以创建的应用可以运行在,上。开源从属于基金会,由微软进行官方支持。   **1,.NET 经历14年,在Windows平台上的表现已经相当优秀, **但是跨平台、开源却是其痛点,从16年开始.NET Core的出现将迎来.NET...

    Olivia 评论0 收藏0
  • 支持VS2017!ComponentOne 2017V1全新发布

    摘要:它帮助用户体验短期价格势头。布林线覆盖系列布林线波动指标显示正常价格波动的上限和下限。斐波那契工具工具可以计算和绘制在金融图表中有用的各种警报级别,例如上升趋势和下降趋势。 ComponentOne Studio Enterprise 是一款专注于企业应用的.NET全功能控件套包,支持WinForms、WPF、UWP、ASP.NET MVC等多个平台,帮助在缩减成本的同时,提前交付丰富...

    lewif 评论0 收藏0
  • ComponentOne 产品经理:什么要从C1Report迁移到FlexReport

    摘要:代码是从头开始编写的因此,在从迁移到时,您会发现中的以下重大更改。从迁移到的五大理由比快两倍。的新架构和后续更新架构有助于支持常见的布局功能,例如并排分页两个子报表等。 概述 showImg(https://segmentfault.com/img/bVblbYV?w=793&h=320); 如果你正在使用ComponentOne Enterprise 的Reports for Win...

    Enlightenment 评论0 收藏0
  • Xamarin 学习笔记

    摘要:自此微软生成用开发的软件将不仅仅能够运行在上,而是可以在任何设备上运行。 本文翻译自CodeProject文章:https://www.codeproject.com/Articles/1223980/Xamarin-Notes-Set-up-the-environment-Windows-and-I 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。...

    keithxiaoy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<