Solucionar problemas y depurar las conexiones de red (aplicaciones de Windows en tiempo de ejecución)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Los problemas de red pueden provocar que las aplicaciones no respondan, se bloqueen o muestren cuadros de diálogo que no se pueden accionar y mensajes de error confusos a los usuarios. Solucionar y depurar estos errores puede resultar difícil, ya que estos pueden ocurrir en cualquier parte de la pila de red.

Quiénes se ven afectados

Todas las aplicaciones de Windows en tiempo de ejecución que usan la red, ya sea directamente (con sockets, por ejemplo) o indirectamente (mediante una API que eventualmente usa la red), pueden experimentar problemas de red. La situación ideal es que el sistema operativo controle automáticamente las condiciones de error de la red en nombre de la aplicación, pero cuando esto no funciona, las aplicaciones deben estar preparadas para encargarse de los errores.

Seleccionar la funcionalidad de red correcta

Para que una aplicación de Windows en tiempo de ejecución pueda acceder a la red, debe haber habilitadas algunas funcionalidades de aislamiento de red en el manifiesto de la aplicación. Estas funcionalidades se configuran normalmente con Microsoft Visual Studio 2013 cuando se desarrolla la aplicación. Windows se ocupa de aplicar estas funcionalidades. Si no se estableció la funcionalidad de red apropiada, es posible que se bloquee el acceso a la red.

Por lo tanto, el primer paso para solucionar problemas de red es comprobar que se hayan configurado las funcionalidades de red adecuadas para la aplicación.

Capacidad de red Descripción

privateNetworkClientServer

  • Por lo general, se trata de un "perfil" privado (que incluye la subred local y la funcionalidad de bucle invertido). En una configuración de empresa, esto incluiría la subred local y el sitio/dominio de Active Directory.

  • Si se habilita esta capacidad significa que la aplicación sirve para usarla en la red privada doméstica o en una red privada en el lugar de trabajo.

internetClient

  • Permite la comunicación con servicios de Internet (a través de un proxy, si es necesario). Es similar a la funcionalidad internetClientServer, salvo que todas las comunicaciones deben ser iniciadas por el cliente. El cliente no escucha conexiones de otros hosts. No se permiten conexiones al bucle invertido o a la subred local.

internetClientServer

  • Permite la comunicación con servicios de Internet (a través de un proxy, si es necesario). Esta configuración permite disponibilidad y conectividad entrante de Internet y operaciones salientes iniciadas por el cliente.

Nota  Si bien esta funcionalidad habilita la comunicación entrante, no está garantizado que funcione. Los firewalls y servidores proxy perimetrales de una red empresarial pueden seguir bloqueando la comunicación entrante.
 

proximity

Permite que dos equipos que están en proximidad física cercana (hasta 30 cm) puedan interactuar entre sí con las características del espacio de nombres Windows.Networking.Proximity.

 

Una vez que hayas determinado el acceso a la red necesario para tu aplicación, asegúrate de que se hayan establecido todas las configuraciones de funcionalidades correspondientes. Si no lo haces, se bloqueará el acceso a la red.

Para obtener información sobre cómo habilitar el bucle invertido para el acceso a la red y solucionar problemas de aislamiento de red, consulta el tema sobre cómo habilitar el bucle invertido y depurar el aislamiento de red.

Reaccionar ante cambios de estado de la red

Cuando Windows 8.1, Windows Phone 8.1 o Windows Server 2012 R2 detectan una nueva red, proporcionan automáticamente nuevas opciones de conectividad. Por ejemplo, si un usuario está usando su red 3G para transmitir datos y, después, entra dentro del alcance de una red Wi-Fi, la nueva opción de conectividad estará disponible para la aplicación si es que tiene sentido.

En el caso de un dispositivo móvil, las redes pueden ir y venir. Una red 3G puede salir del alcance dentro del lugar de trabajo o el hogar del usuario mientras que la conexión Wi-Fi sigue disponible. De igual modo, la conexión Wi-Fi puede salir del alcance cuando un usuario sale de su trabajo u hogar. Además, puede haber ocasiones en las que no haya ninguna red disponible. Dada la proliferación de redes de banda ancha móvil y Wi-Fi, dichos cambios de red (redes que van y vienen o no están disponibles) ocurrirán con frecuencia. Las conexiones no pasan automáticamente a una red nueva sin ningún problema. La aplicación debe participar en esta tarea. Ten en cuenta que la directiva predeterminada en Windows 8.1, Windows Phone 8.1 y Windows Server 2012 R2 consiste en seleccionar la red sin restricciones en lugar de la red de uso medido, y la red más rápida en lugar de la más lenta.

El acceso a la red puede verse afectado cada vez que se produzcan cambios en la red. Una aplicación puede registrar notificaciones de cambio de estado de la red (onNetworkStatusChanged) para que se le notifique cuando se produzcan cambios. Si la conexión que estaba usando la aplicación ya no está disponible (según lo indica un error), la aplicación deberá seguir alguno de los siguientes pasos:

  • Volver a intentar la operación. Si falla, esperar otra notificación de NetworkStatusChanged.
  • Comprobar el costo de la red e intentar conectarse a otra red diferente.

Guía básica de solución de problemas

Debes hacer lo siguiente en las aplicaciones de Windows en tiempo de ejecución:

  • Cuando se produzca un error de red, reintenta la operación si corresponde. Por ejemplo, no reintentes la operación si la autenticación falla, pero vuelve a intentarla si una red inalámbrica con la que te estabas comunicando desaparece, ya que otra red inalámbrica puede estar disponible. Muchos errores desaparecen cuando se vuelve a intentar la operación. Al reintentarlo, sigue las instrucciones especificadas anteriormente en Reaccionar ante cambios de estado de la red.

  • Asegúrate de usar API asincrónicas para que no haya una llamada de bloqueo en el subproceso de interfaz de usuario. Si un proceso de red tarda demasiado tiempo en completarse o se produce un error, tu aplicación debería seguir respondiendo. No emules un comportamiento sincrónico sobre la naturaleza asincrónica de Windows en tiempo de ejecución.

  • Ten planeado de antemano un modelo para controlar los errores. Piensa cómo exponer la información sobre errores al usuario cuando diseñes la aplicación. Por ejemplo, Outlook usa un indicador de red discreto, Communicator tiene un esquema de "reemplazar toda la interfaz de usuario", Internet Explorer incluye un cuadro de diálogo orientado a tareas para las descargas que muestra errores de red. Captura errores y excepciones en los casos en los que se genere una excepción. Comprende cada una de las cadenas de error e informa al usuario como corresponda.

  • Prueba tu aplicación en diversos entornos de red con actividades como desconectarse o volver a conectarse a la red, suspender o reanudar las tareas, o pasar de una red a otra.

  • Cuando estés probando la aplicación y encuentres errores que no son inmediatamente obvios, puedes habilitar el Seguimiento de eventos para Windows (ETW) para recopilar más detalles sobre el problema.

Temas relacionados

Agregar soporte para funciones de red

Seguimiento de eventos para Windows (ETW)

Cómo configurar las funcionalidades de aislamiento de red

Cómo habilitar el bucle invertido y depurar el aislamiento de red