Solução de problemas e depurando conexões de rede (aplicativos do Tempo de Execução do Windows)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Problemas de rede podem levar os aplicativos a parar de responder, falhar ou exibir caixas de diálogo não acionáveis e mensagens de erro confusas aos usuários. A localização e depuração desses erros pode ser difícil, porque eles podem ocorrer em qualquer ponto da pilha de rede.

Quem é afetado

Todos os aplicativos do Tempo de Execução do Windows que usam a rede diretamente (usando soquetes, por exemplo) ou indiretamente (usando uma API que ocasionalmente usa a rede) podem ser afetados por problemas na rede. A situação ideal é aquela em que o sistema operacional resolve automaticamente as condições de erro na rede em nome do aplicativo; quando isso não funciona, os aplicativos devem estar preparados para lidar com erros.

Selecionando o recurso de rede correto

Para que um aplicativo do Tempo de Execução do Windows acesse a rede, certos recursos de isolamento da rede devem estar habilitados no manifesto do aplicativo. Esses recursos são geralmente configurados usando o Microsoft Visual Studio 2013 quando o aplicativo é desenvolvido. Esses recursos são impostos pelo Windows. Caso o recurso de rede apropriado não tenha sido definido, o acesso à rede pode ser bloqueado.

Portanto, o primeiro passo ao solucionar problemas de rede é verificar se os recursos de rede apropriados foram configurados para o aplicativo.

Recurso de rede Descrição

privateNetworkClientServer

  • Esse geralmente é um "perfil" privado (incluindo a sub-rede local e recursos de loopback); em um ambiente corporativo, também deve incluir a sub-rede local e o site/domínio Active Directory.

  • A habilitação dessa configuração significa que o aplicativo destina-se ao uso na rede privada doméstica ou em uma rede privada no local de trabalho.

internetClient

  • Permite a comunicação com serviços na Internet (por meio de um proxy, se necessário). É semelhante ao recurso internetClientServer, exceto quanto ao fato de que todas as comunicações devem ser iniciadas pelo cliente; o cliente não escutará conexões de outros hosts. Nenhuma conexão à sub-rede local ou de loopback é permitida.

internetClientServer

  • Permite a comunicação com serviços na Internet (por meio de um proxy, se necessário). Essa configuração habilita tanto a conectividade/acessibilidade a partir da Internet como as operações de saída iniciadas pelo cliente.

Observação  Embora esse recurso permita as comunicações de entrada, não é garantido que funcionem; as comunicações de entrada podem continuar sendo bloqueadas por proxies de borda e firewalls em uma rede corporativa.
 

proximity

Permite que duas máquinas fisicamente muito próximas (até 30 cm de distância) interajam usando os recursos do namespace Windows.Networking.Proximity.

 

Tendo determinado o acesso à rede exigido pelo seu aplicativo, certifique-se de que as configurações dos recursos de rede apropriados foram definidas. Caso contrário, o acesso à rede será bloqueado.

Para obter informações sobre como habilitar o loopback para acesso à rede e solucionar problemas de isolamento de rede, veja Como habilitar o loopback e depurar o isolamento da rede.

Reagindo a alterações de status da rede

Quando o Windows 8.1, Windows Phone 8.1 ou Windows Server 2012 R2 detecta novas redes, ele automaticamente fornecerá novas opções de conectividade. Por exemplo, se um usuário estiver usando sua rede 3G para fluxo de dados e, subsequentemente, entrar na área de alcance de uma rede Wi-Fi, a nova opção de conectividade será disponibilizada ao aplicativo, caso isso faça sentido.

Em qualquer cenário de dispositivo móvel, as redes podem surgir e desaparecer. Uma rede 3G pode ficar fora de alcance dentro da residência ou do local de trabalho do usuário enquanto a rede Wi-Fi permanece disponível; da mesma forma, a rede Wi-Fi pode ficar fora de alcance quando o usuário sai de casa ou do local de trabalho. Além disso, pode haver ocasiões em que nenhuma rede está disponível. Devido à proliferação de Wi-Fi e de redes de banda larga móveis, essas alterações na rede (redes vindo, indo ou não estando disponíveis) serão comuns. As conexões não migram automaticamente para uma nova rede de maneira transparente; é necessário que o aplicativo seja envolvido no processo. Observe que a política padrão no Windows 8.1, Windows Phone 8.1 e Windows Server 2012 R2 é escolher a rede irrestrita sobre a rede limitada e a rede mais rápida sobre a rede mais lenta.

O acesso à rede pode ser afetado sempre que ocorrer uma alteração de rede. Um aplicativo pode se registrar para notificações de alteração de status da rede (onNetworkStatusChanged), de modo a ser notificado quando essas alterações ocorrerem. Se a conexão que o aplicativo estava usando tornar-se indisponível (o que é indicado por um erro), ele terá que fazer o seguinte:

  • Tentar novamente a operação. Se isso falhar, aguardar outra notificação de NetworkStatusChanged.
  • Verificar o custo de rede e tentar se conectar a uma rede diferente.

Orientação básica para solução de problemas

Os aplicativos do Tempo de Execução do Windows devem fazer o seguinte:

  • Quando um erro de rede ocorrer, tentar novamente a operação, se apropriado. Por exemplo, não repetir a operação se a autenticação falhar, mas tentar novamente se uma rede sem fio desaparecer durante a comunicação, porque outra rede sem fio pode estar disponível. Muitos erros simplesmente desaparecem quando a operação é tentada novamente. Ao repetir a operação, seguir as diretrizes especificadas anteriormente em Reagindo a alterações de status da rede.

  • Usar APIs assíncronas para que não haja chamada de bloqueio no thread da interface do usuário. Se uma operação de rede levar muito tempo para ser concluída ou gerar erro, o aplicativo não deve parar de responder. Não emule um comportamento síncrono sobre a natureza assíncrona do Tempo de Execução do Windows.

  • Ter um modelo de manipulação de erros planejado antecipadamente. Ao projetar o aplicativo, avalie cuidadosamente como as informações de erro serão expostas ao usuário. Por exemplo, o Outlook usa um indicador de rede discreto; o Communicator possui um esquema "substituir toda a interface do usuário"; o Internet Explorer inclui uma caixa de diálogo orientada a tarefa para downloads que exibem erros de rede. Capture os erros e exceções nos casos em que uma exceção é acionada. Entenda todas as cadeias de caracteres de erros e informe o usuário conforme necessário.

  • Teste o seu aplicativo em diferentes ambientes de rede com atividades como desconexão ou reconexão à rede, suspensão ou retomada e alternância de uma rede para outra.

  • Caso encontre erros que não sejam imediatamente óbvios ao testar o aplicativo, você pode habilitar o rastreamento ETW para coletar mais dados sobre o problema.

Tópicos relacionados

Adicionando suporte a rede

Rastreamento ETW

Como configurar recursos de isolamento de rede

Como habilitar o loopback e depurar o isolamento da rede