Диагностика и отладка ошибок сетевых подключений (приложения среды выполнения Windows)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Ошибки сети могут приводить к зависанию или аварийному завершению приложений, выводу пользователям сообщений об ошибках и диалоговых окон, в которых невозможно произвести действия. Диагностика и отладка таких ошибок могут быть затруднительны, так как ошибки могут возникать в любом месте сетевого стека.

Кого это касается

Все приложения среды выполнения Windows, использующие сеть явным образом (например, с помощью сокетов) либо неявно (с помощью API, использующего сеть), потенциально подвержены сетевым ошибкам. Оптимальная ситуация для операционной системы — обрабатывать состояние сетевой ошибки автоматически от имени приложения. Если это не получается, приложения должны быть готовы обрабатывать ошибки.

Выбор необходимых сетевых характеристик

Для доступа приложения среды выполнения Windows к сети необходимо разрешить определенные возможности сетевой изоляции в манифесте приложения. Обычно эти возможности настраивают с помощью Microsoft Visual Studio 2013 во время разработки приложения. Эти возможности обеспечиваются Windows. Если необходимая сетевая возможность не была задана, то доступ к сети может быть заблокирован.

Таким образом, первый шаг при диагностике ошибок сети — проверить, что для приложения были настроены необходимые сетевые характеристики.

Сетевая характеристика Описание

privateNetworkClientServer

  • Обычно это частный "профиль" (включает локальную подсеть и характеристику замыкания на себя); в корпоративном варианте настройки также включает локальную подсеть и узел либо домен Active Directory.

  • Включение этого параметра означает, что приложение предназначено для использования в частной сети дома или в организации.

internetClient

  • Разрешает связь со службами по Интернету (если требуется, то через прокси). Похож на характеристику internetClientServer, но все подключения должны быть инициированы клиентом. Клиент не прослушивает подключения с других узлов. Подключения к локальной подсети и замыкание на себя запрещены.

internetClientServer

  • Разрешает связь со службами по Интернету (если требуется, то через прокси). Эта характеристика разрешает как входящие подключения и доступность из Интернета, так и исходящие операции, инициированные клиентом.

Примечание  Хотя эта характеристика разрешает входящее подключение, работоспособность подключения не гарантирована. Пограничные прокси-серверы и межсетевые экраны могут блокировать входящее соединение.
 

proximity

Разрешает взаимодействовать двум близко расположенным компьютерам (до 30 см), используя возможности пространства имен 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 и что в потоке пользовательского интерфейса нет блокирующего вызова. Если сетевая операция требует много времени для завершения или возникла ошибка, ваше приложение не должно перестать реагировать. Не следует эмулировать синхронное поведение на основе асинхронной среды выполнения Windows.

  • Создайте модель обработки ошибок заранее. Во время разработки приложения продумайте, как выводить сведения об ошибках для пользователя. Например, Outlook использует неброский индикатор состояния подключения; Communicator применяет схему "замены всего пользовательского интерфейса"; в Internet Explorer есть специальное диалоговое окно задач по скачиванию, где отображаются ошибки сети. Фиксируйте ошибки и исключения в случае их возникновения. Разбирайтесь с каждой строкой ошибки и сообщайте пользователю об ошибках должным образом.

  • Тестируйте приложение в различных условиях сетевой среды при таких действиях, как отключение или восстановление соединения с вашей сетью, приостановка и возобновление, а также переключение из одной сети в другую.

  • При обнаружении во время тестирования ошибок вы можете включить трассировку событий Windows, чтобы собрать больше данных о проблеме.

Связанные разделы

Добавление поддержки сети

Трассировка событий Windows

Настройка характеристик сетевой изоляции

Использование интерфейса замыкания на себя и отладка сетевой изоляции