在当今,以云优先,移动优先技术为宗旨的时代下,大多数Apps都至少有一些与web服务或网络上其他设备的集成。这些包括应用程序,它获取天气在线内容,新闻或体育比赛的分数,媒体或下载的播客,甚至对等网络游戏、聊天或VoIP应用。这些应用程序通过使用各种各样的网络API来共同构建通用应用程序平台。
     在windows 10中,我们的网络团队投入了大量努力改善开发人员在使用这些网络API时在功能和灵活性方面的运行速度和内存性能。在这篇博客文章,我们将讨论一些关键我们在这方面取得改进,并向你说明该如何在您自己的应用程序中利用这些新的特性。
 
通用应用程序平台下的网络API:
通用Windows平台(UWP)包含一组大型的网络api,主要是针对不同的方案,包括从查询设备的连接状态和连接到对等设备,与REST的web服务通信并在后台下载大型媒体文件。在这篇博客文章,我们将重点放在以下的网络api的子集:
  1. Windows.Networking.Sockets – 通常用在P2P聊天、VoIP、VPN应用程序
  2. System.Net.Sockets – .NET版本的网络套接字API,主要用于跨平台的库和应用程序
  3. WinSock –  广泛用于跨平台的库,如OpenSSL或者多人游戏库
  4. Windows.Web.Http and System.Net.Http – 用于与REST web服务进行通信
  5. Windows.Networking.BackgroundTransfer – 用于上载或下载数据,即使应用程序没有在前台
  6. Windows.Data.Json – 用于序列化/反序列化JSON内容由web服务提供服务
这些API在最底层着代表不同的网络套接字层,HTTP构建在它之上。最后,后台传输和JSON,它为构建在HTTP之上添加了更多的价值。
 
网络API在Windows10中的新特性:
在windows 10中,上述的API已经加强了更高的性能,为开发人员提供了更大的灵活性。我们在BUILD 2015视频中详细讨论所有这些改进为。
  1. Socket Broker:允许应用程序侦听套接字,即使是当应用程序在后台运行的情况下;
  2. Batched Sends:在套接字API实现的一种新的优化,可以以高达4x的速度发送数据;
  3. HTTP/2:新版的HTTP API支持新的,更快UWP应用程序的HTTP协议的版本。这使得REST web服务下载和上传高达3x的速度;
  4. Post-processing in Background Transfer:UWP应用程序现在可以处理后台任务中的下载/上传,即使是在应用程序下次启动。
由于时间限制,我们不能涵盖所有新功能的视频中,我们添加到windows 10。这里还有更多:
 
System.Net.Sockets 和 Winsock for UWP Apps:
针对UWP应用程序开发者来说,Windows10、System.Net.Sockets和Winsock已经添加到API中,在Windows应用商店中的应用程序(它们也同样适用于Windows Phone Silverlight apps),这些API使用频率是很高的。在Visual Studio2014中WinSock也同样支持Windows8.1。
在当前UWP中的Winsock和System.Net.Sockets是基于Phone 8.1 Silverlight,并且继续支持大多数的类型,属性和方法(一些被认为过时的API已经被移除了。)。
 
客户端证书支持流式套接字类:
Windows.Networking.StreamSocket类支持通过使用using SSL/TLS进行服务器与应用程序将的认证交互。在某种情况下,这个应用程序还需要通过使用TLS客户端证书向服务器验证自身。 在Windows10开始时,你可以在流式套接字中提供一个客户端证书,控制对象(它必须在TLS进行握手协议之前启动)。如果服务器端请求了一个客户端的证书,Windows将通过提高证书来进行相应。

这里是一个代码片段显示如何实现这种情况:
 var socket = new StreamSocket();
Windows.Security.Cryptography.Certificates.Certificate
certificate = await GetClientCert();
socket.Control.ClientCertificate = certificate;
await socket.ConnectAsync(destination,
SocketProtectionLevel.Tls12);
 
JSON在处理null值有了更好的调试体验:
一个关键的开发者要求我们对Windows 8.1中的Windows.Data.Json API针对null提高更好的处理方法。伴随着Windows10,我们已经添加了新的更加直观的API去序列化和反序列化null值与JSON字符串。下面是一个在Windows 10中UWP应用程序如何处理JSON字符串中的null值的示例:
对象序列化为JSON(Stringify):
 jsonObject[key] = JsonValue.CreateNullValue();
var outputString = jsonObject.Stringify();
反序列化JSON字符串(Parse):

 IJsonValue myJsonValue = jsonObject.GetNamedValue(key);

 if (myJsonValue.ValueType == JsonValueType.Null)
{
Phone = null;
}
else
{
var myValue = myJsonValue.GetString();
}

新的枚举类型值JsonValueType.Null 允许开发者通过以同样的编程方式使用整型、字符串和布尔类型的值来处理null。

JSON在Visual Studio中丰富的调试体验:
接下来我们需要介绍的是 Windows.Data.Json 在Visual Studio中丰富的调试体验。在Windows8.1中,开发者通过逐句调试只能看到一个JsonObject或JsonArray实例的类型,而不是它的全部内容。这使得开发人员更难调试分析逻辑,并确保其是否被正确填充。伴随着Windows10,你现在可以检查内部的JsonObject和JsonArray类型的内容。下面是一个示例与JsonArray对象:
 
改进的SD卡支持后台传输:
在Windows8.1中,Windows.Networking.BackgroundTransfer API支持将数据下载到可移动存储设备中(如SD卡),实际上是将数据下载为内部临时缓存,然后再将数据移到指定的位置,这样导致的后果是可以下载的文件的大小限制了可用的内存量。
在Windows10中,

旧有的实现方式被改为检查下载是发生在不同的驱动器而不是在安装程序中,并将使用该临时缓存的位置。这将解决不能下载大文件在SD卡上的问题(要下载的数据远远大于应用程序的内存存储)。
 
 
 
与此相关的文章链接:

注:转向原文

  由于部分翻译并没有完全按照原文翻译的,所有可能与原文有所不同,还请各位博友批评和指正!!

[转*译]Networking API Improvements in Windows 10的更多相关文章

  1. Windows 10 的音频和 MIDI API将统一

    微软一统 Windows 10 的音频和 MIDI API 微软在夏季NAMM上的A3E大会上做了主题演讲,他们对Windows 10的音频和MIDI API都做了新的规划,开发者针对Windows ...

  2. Windows 10新功能

    Windows 10 中面向开发人员的新增功能 Windows 10 及新增的开发人员工具将提供新通用 Windows 平台支持的工具.功能和体验.在 Windows 10 上安装完工具和 SDK后, ...

  3. [深入浅出Windows 10]不同平台设备的适配

    2.3 不同平台设备的适配 Windows 10通用应用程序针对特定的平台还会有一个子API的集合,当我们要使用到某个平台的特定API的时候(比如手机相机硬件按钮触发事件),这时候就需要调用特定平台的 ...

  4. Windows 10, version 21H1 ARM64

    请访问原文链接:https://sysin.org/article/windows-10-arm/,查看最新版.原创作品,转载请保留出处. Windows 10, version 21H1 (rele ...

  5. Windows 10 16251 添加的 api

    本文主要讲微软最新的sdk添加的功能,暂时还不能下载,到 7月29 ,现在可以下载是 16232 ,支持Neon效果 实际上设置软件最低版本为 16232 就自动支持 Neon 效果. 主要添加了 A ...

  6. 在 Windows 8、Windows 10 桌面模式下的 .NET Framework 程序中,引用 Windows.Runtime 的 API。

    参考:1.https://www.cnblogs.com/webtojs/p/9675956.html 2.http://jennal.com/2016/04/28/using-windows-run ...

  7. Windows 10 开发人员预览版中的新增功能(转自 IT之家)

    Windows 10 开发人员预览版中的新增功能 在Win10预览版中安装工具与SDK后,即可着手创建Windows通用应用或先浏览目前的环境与此前相比都发生了什么变化. 应用建模 文件资源管理器: ...

  8. 背水一战 Windows 10 (120) - 后台任务: 后台上传任务

    [源码下载] 背水一战 Windows 10 (120) - 后台任务: 后台上传任务 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台上传任务 示例演示 uwp 的后台上 ...

  9. UWP 推荐 - 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10

    文/云之幻 前不久,博客作者 Bravo Yeung 写了一篇还算略受欢迎的关于 RSS 的文章 .Net开发者必知的技术类RSS订阅指南. RSS 现在用的人很少了,而且就算是我,也不过是在一周前才 ...

随机推荐

  1. BASH 正则表达式和文本处理工具

    本节内容 1.  什么是正则 2.  grep 3.  sed 4.  awk 5.  其他补充 一  什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方 ...

  2. WITH RECOMPILE和OPTION(RECOMPILE)区别仅仅是存储过程级重编译和SQL语句级重编译吗

    在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等), 一是基于WITH RECOMPILE的存储过程级 ...

  3. 9.7 翻译系列:EF数据注解特性之--InverseProperty【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/inverseproperty-dataannotations-attribute-in ...

  4. JavaScript使用浏览器内置XML解析器解析DOM对象

    所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 (可通过 JavaScript 操作的对象). 一.获取DOM对象 XMLHttpReq ...

  5. Java面试集合(二)

    前言 大家好,给大家带来Java面试集合(二)的概述,希望你们喜欢 二 1.请问线程有哪些状态? 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked ...

  6. 机器学习技法笔记:08 Adaptive Boosting

    Roadmap Motivation of Boosting Diversity by Re-weighting Adaptive Boosting Algorithm Adaptive Boosti ...

  7. [视频]K8飞刀 shellcode loader演示教程

    [视频]K8飞刀 shellcode loader演示教程 https://pan.baidu.com/s/1eQ77lPw

  8. app自动化测试中的相关api

    这个说的api即python自动化测试中经常会使用到的一些api,具体如下: 1.find_element_by_id/find_elements_by_id 定位元素api,使用方法如下: driv ...

  9. Code Complete-13/7/29

    Measure Twice,Cut Once! 漫步到第三章: just is about upstream prerequisites. 在构建活动开始之前,准备工作要做的周全. Upstream ...

  10. TCP/IP 笔记 - Internet地址结构

    连接到Internet中的每台设备至少都有一个IP地址,IP地址表示了流量的来源(好比别人要找你玩,需要知道你家的地址:网络中别人需要和你通信,也需要知道IP地址),且Internet中的IP地址必须 ...