Comunicación con localhost (bucle invertido)

En Windows IoT Core, si quieres crear una conexión TCP/IP entre dos procesos que se ejecutan en el mismo dispositivo y uno de ellos es una aplicación para UWP, debes habilitar el bucle invertido localhost.

Bucle invertido y el depurador

De forma predeterminada, al ejecutarse en el depurador de Visual Studio, solo se habilita el bucle invertido saliente automáticamente para esa sesión de depuración.  No debe hacer nada siempre que la casilla bucle invertido esté activada en la configuración del depurador del proyecto de inicio.  Si desea implementar un agente de escucha de socket, debe habilitar el bucle invertido localhost para las conexiones entrantes (consulte a continuación).

Habilitación de la directiva de bucle invertido de entrada

La directiva de bucle invertido de entrada localhost para Windows IoT Core debe estar habilitada para las aplicaciones para UWP que implementan servidores. Esta directiva se controla mediante la siguiente clave del Registro:

        [HKEY_LOCAL_MACHINE\system\currentcontrolset\services\mpssvc\parameters]
            "IoTInboundLoopbackPolicy"=dword:00000001

Este valor de clave del Registro IoTInboundLoopbackPolicy debe establecerse en dword:00000001 para habilitar. Si cambia el valor del registro IoTInboundLoopbackPolicy, debe reiniciar para que el cambio surta efecto.  La directiva de bucle invertido localhost debe estar habilitada de forma predeterminada en Windows IoT Core.

Para comprobar que el valor está establecido, ejecute el siguiente comando en el dispositivo Windows IoT Core :

        reg query hklm\system\currentcontrolset\services\mpssvc\parameters /v IoTInboundLoopbackPolicy

Para habilitar la directiva, ejecute el siguiente comando en el dispositivo Windows IoT Core :

        reg add hklm\system\currentcontrolset\services\mpssvc\parameters /v IoTInboundLoopbackPolicy /t REG_DWORD /d 1

Habilitación de bucle invertido para una aplicación para UWP

Para poder habilitar el bucle invertido para una aplicación, necesitará el nombre de familia del paquete. Para encontrar el nombre de familia de paquete de una aplicación instalada, ejecute la lista iotstartup. Si la entrada de lista iotstartup de la aplicación es IoTCoreDefaultApp_1w720vyc4ccym! A continuación, el nombre de familia del paquete se IoTCoreDefaultApp_1w720vyc4ccym

Para habilitar el bucle invertido para las conexiones de cliente, use CheckNetIsolation.exe LoopbackExempt -a -n=<AppContainer or Package Family>. CheckNetIsolation.exe configurará bucle invertido para la aplicación y se cerrará. Esto permitirá que la aplicación realice conexiones salientes a un servidor.

Ejemplo: CheckNetIsolation.exe LoopbackExempt -a -n=IoTCoreDefaultApp_1w720vyc4ccym

Para permitir que una aplicación de servidor reciba conexiones entrantes, use CheckNetIsolation.exe LoopbackExempt -is -n=<AppContainer or Package Family>. A diferencia de la configuración de conexión saliente, las conexiones entrantes requieren CheckNetIsolation.exe ejecutarse continuamente mientras la aplicación de servidor recibe conexiones.  Esto requiere una compilación del sistema operativo más reciente que la 10.0.14393.

Ejemplo: CheckNetIsolation.exe LoopbackExempt -is -n=IoTCoreDefaultApp_1w720vyc4ccym

La mejor manera de ejecutar CheckNetIsolation.exe automáticamente durante el inicio es usar schtasks.exe: schtasks /create /tn MyTask /f /sc onstart /ru system /tr "checknetisolation LoopbackExempt -is -n=IoTCoreDefaultApp_1w720vyc4ccym"

Al reiniciar, debería poder comprobar que checknetisolation.exe se está ejecutando mediante tlist.exe o el Portal de dispositivos Windows.