如何启用环回和排除网络隔离故障(Windows 运行时应用)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
本主题将介绍如何为网络访问启用环回,以及如何解决 Windows 应用商店应用在 Windows 8 中的网络隔离问题。
你需要了解的内容
技术
Windows.Networking.BackgroundTransfer
支持高级下载和上载传送功能。
-
支持使用套接字和 WebSocket 进行网络通信。
-
支持使用 AtomPub 协议访问 Web 资源。
-
管理联合源。
-
支持使用现代 Web 客户端连接 Web 服务。
-
支持使用 Web 客户端连接到 Web 服务。
先决条件
- 以下信息适用于任何需要进行网络连接的联网或网络感知的 Windows 运行时应用。这会影响采用 JavaScript 编写的应用。这也影响使用 .NET Framework 4.5 以 C#、VB.NET 和 C++ 编写的应用。
网络隔离的诊断工具
CheckNetIsolation.exe 是一个内置的诊断工具,可帮助开发人员测试、诊断需要网络功能的应用,并为这些应用进行故障排除。CheckNetIsolation.exe 是一个获取命令行输入参数的命令行工具。它有两个主要选项:
LoopbackExempt
查看已免除 IP 环回限制且被允许访问环回地址的已安装应用的列表。此选项也允许在测试时为特定应用添加对 IP 环回地址的访问。调试
确定应用所使用的已启用功能和未使用的所有已启用功能。 任何未使用的已启用功能都会降低应用的安全性。此选项也可提供有关(可能因意外)断开的网络通信的信息。
CheckNetIsolation.exe 可以在显示帮助消息的同时显示使用情况信息。要显示帮助,请使用下面的示例命令。
CheckNetIsolation -?
某些 CheckNetIsolation.exe 选项要求提供应用名称或应用 ID。在目标计算机上部署了某个应用之后,可以在 c:\Program Files\Applications 文件夹下找到该应用的名称。这是用于启动该应用的名称。这是在使用 Microsoft Visual Studio 2013 时显示的程序包系列名称,代表应用容器。可在下列注册表项下找到该应用 ID。
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer
为网络访问启用环回
由于受网络隔离限制,使用 IP 环回地址的网络通信无法在 Windows 运行时应用中用于进程间通信(两个不同的应用之间)。使用 IP 环回地址的网络通信允许在同一进程的应用内进行通信。
尽管环回功能对于客户将不可用,但开发人员可能需要使用环回进行测试或调试。例如,某个应用可能需要从 Windows 运行时应用的 Web 服务下载数据。 对于开发而言,开发人员需要在单台本地配置了 Web 服务 (127.0.0.1) 的计算机上测试应用。
注意 仅允许将环回用于开发目的。不允许在 Visual Studio 之外安装的 Windows 运行时应用进行使用。此外,Windows 运行时应用仅可将 IP 环回用作客户网络请求的目标地址。所以,使用 DatagramSocket 或 StreamSocketListener 侦听 IP 环回的 Windows 运行时应用不能接收任何传入数据包。
要启用对环回地址的访问,开发人员必须配置网络隔离,以使应用免除环回限制。为了使网络服务接收数据包,还需要由防火墙规则允许 TCP 或 UDP 端口上的侦听器。
在 Visual Studio 中安装和运行的应用将自动注册为已免除环回限制。开发人员可通过运行下面的命令来查看免除应用的列表:
CheckNetIsolation.exe LoopbackExempt -s
开发人员也可以使用 CheckNetIsolation.exe 工具为应用手动添加环回免除。
要使应用免除环回限制,必须提供包的应用 ID。以下示例命令可使应用免除环回限制。
CheckNetIsolation.exe LoopbackExempt –a –p=S-1-15-2-4125766819-3228448775-2449327860-2490758337-1264241865-3581724871-2122349299
也可以删除特定应用的环回限制免除。以下示例命令可为同一应用删除环回免除。
CheckNetIsolation.exe LoopbackExempt –d –p=S-1-15-2-4125766819-3228448775-2449327860-2490758337-1264241865-3581724871-2122349299
通过 CheckNetIsolation.exe 工具,开发人员还可以根据应用容器的名称使应用免除这些环回限制。 以下示例命令可按应用容器名称使应用免除环回限制。
CheckNetIsolation.exe LoopbackExempt –a –n=stocks_mw26f2swbd5nr
对于使用 .NET Framework 编写的应用,也可以根据应用容器的名称删除这些应用的环回限制免除。以下示例命令可为同一应用删除环回免除。
CheckNetIsolation.exe LoopbackExempt –d –n=stocks_mw26f2swbd5nr
也可以为安装的所有应用删除环回限制免除。以下示例命令可为本地计算机上安装的所有应用删除环回免除。
CheckNetIsolation.exe LoopbackExempt –c
调试网络隔离问题
此调试选项用于生成 应用所用的网络功能 的报告。
使用此调试选项可识别应用是否正在使用应用清单中声明的所有功能。使用此调试选项时,将指示系统跟踪应用正在使用哪一项声明的功能,以及未使用哪些声明的功能。
要使用此调试选项,首先向目标计算机部署应用,并确定应用 ID 和应用名称。然后必须使用提升的权限(以管理员身份运行)来打开 CMD 窗口。以下示例命令可为特定的应用 ID 设置调试选项。
CheckNetIsolation.exe Debug –p=S-1-15-2-4125766819-3228448775-2449327860-2490758337-1264241865-3581724871-2122349299
以下示例命令可根据应用容器的名称为应用设置调试选项。
CheckNetIsolation.exe Debug –n=stocks_mw26f2swbd5nr
设置了调试选项之后,从提升的 CMD 窗口启动应用。你应该执行并测试应用将执行的操作。完成测试且应用仍在运行时,按下 Ctrl-C。摘要报告将显示在 CMD 窗口中,该窗口为每个功能都列出了一个网络功能状态条目,以指明该功能是否已声明,以及该功能是否已被使用。声明了不需要的功能时,摘要报告将指明该功能未被使用(摘要报告称之为“未使用”和“不安全”)。详细的通信报告还会列出用于网络访问的源 IP 地址和目标 IP 地址。
以下文本显示的是启用了额外功能的应用的输出。
Network Isolation Debug Session started.
Reproduce your scenario, then hit Ctrl-C when done.
Summary Report
Network Capabilities Status
----------------------------------------------------------------------
InternetClient Not Used and Insecure
InternetClientServer Not Used and Insecure
PrivateNetworkClientServer Used and Declared
Detailed Traffic Report
----------------------------------------------------------------------
InternetClient Not Used and Insecure
----------------------------------------------------------------------
InternetClientServer Not Used and Insecure
----------------------------------------------------------------------
PrivateNetworkClientServer Used and Declared
------------------------------------------------------------------
10.195.58.77 10.195.58.78
以下文本显示的是启用了适当功能的应用的输出。
Network Isolation Debug Session started.
Reproduce your scenario, then hit Ctrl-C when done.
Summary Report
Network Capabilities Status
----------------------------------------------------------------------
PrivateNetworkClientServer Used and Declared
Detailed Traffic Report
----------------------------------------------------------------------
PrivateNetworkClientServer Used and Declared
------------------------------------------------------------------
10.195.58.77 10.195.58.78