网络连接的故障排除和调试(Windows 运行时应用)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
网络问题可导致应用程序停止响应、崩溃或向用户显示无法操作对话框和令用户感到困惑的错误消息。这些错误的排除和调试可能十分复杂,因为错误可能发生在网络堆栈内的任何位置。
受影响的对象
所有直接使用网络(如使用套接字)或间接使用网络(使用 API,而 API 最终会使用网络)的 Windows 运行时应用都会受到网络问题的潜在影响。理想的状况是操作系统代表应用程序自动处理网络错误情况,如果不起作用,则应用程序应准备如何处理错误。
选择正确的网络功能
对于访问网络的 Windows 运行时应用,必须在应用的部件清单中启用某些网络隔离功能。这些功能通常在开发应用时使用 Microsoft Visual Studio 2013 来进行配置。这些功能由 Windows 强制执行。如果未设置相应的网络功能,网络访问可能会被阻止。
因此,网络故障排除的第一步就是检查并确保已为应用配置了相应的网络功能。
网络功能 | 描述 |
---|---|
privateNetworkClientServer |
|
internetClient |
|
internetClientServer |
|
proximity |
允许两台物理距离很近(最多一英尺)的计算机使用 Windows.Networking.Proximity 命名空间功能进行交互。 |
为应用确定了必需的网络访问之后,请确保配置相应的网络功能设置。否则,网络访问将被阻止。
若要了解如何为网络访问启用环回和进行网络隔离故障排除,请参阅如何启用环回和调试网络隔离。
应对网络状态更改
当 Windows 8.1、Windows Phone 8.1 或 Windows Server 2012 R2 检测到新网络时,它将自动提供新的连接选项。例如,如果用户正在使用 3G 网络流传输数据,随后进入 Wi-Fi 网络范围,则系统会在必要时向应用程序提供新的连接选项。
在任何移动设备方案中,网络可能时有时无。当用户在家中或工作场所,可能无法访问 3G 网络,而 Wi-Fi 仍然可用;当用户离开家或工作场所时,可能无法再访问 Wi-Fi。此外,有时还可能没有任何可用网络。鉴于 Wi-Fi 和移动宽带网络的迅速扩散,此类网络变化(网络时有时无,或根本没有可用的网络)将很常见。如果应用不执行相应的操作,则连接无法平顺而自然地自动切换到一个新的网络。请注意,在 Windows 8.1、Windows Phone 8.1 和 Windows Server 2012 R2 中对于网络选择的默认策略是:无限制的网络优先于按流量计费的网络;速度较快的网络优先于较慢的网络。
发生网络更改时,网络访问随时受到影响。应用可以注册网络状态更改通知 (onNetworkStatusChanged),这样便可在网络状态发生更改时获得通知。如果应用正在使用的连接不再可用(通过错误提示),应用需要执行以下操作:
- 重试该操作。 如果失败,则请等待另一个 NetworkStatusChanged 通知。
- 检查网络成本并尝试连接至其他网络。
故障排除基本指南
Windows 运行时应用需要执行以下操作:
当发生网络错误时,重试相应的操作。例如,如果身份验证失败则不要重试操作,但如果正在与之通信的无线网络突然消失,则需重试操作,因为可能有其他无线网络可用。多数错误都可以通过重试操作解决。在重试时,请按照前面的应对网络状态更改中的说明进行操作。
请确保使用异步 API,以避免 UI 会话上出现正在阻止的调用。如果联网操作需要很长时间才能完成,或者出现错误,则应用程序不应停止响应。不要忽视 Windows 运行时的异步本质而模拟同步行为。
事先计划好一个处理错误的模式。在设计应用程序时,仔细思考如何向用户传达错误信息。例如,Outlook 使用一个谨慎的网络指示器;Communicator 有“替换整个 UI”方案;Internet Explorer 包含可显示网络错误的面向任务的下载对话框。出现异常时捕获错误和异常。了解每个错误字符串,并以正确方式通知用户。
在各种网络环境中对你的应用程序执行各种操作测试,例如断开或重新连接网络、暂停或恢复,或者从一个网络切换到另一个。
在测试应用并发现并非十分明显的错误时,可以启用 ETW 跟踪来收集有关问题的详细信息。