Взаимодействие с localhost (замыкание на себя)

В Windows IoT Базовая, если вы хотите создать tcp/IP-подключение между двумя процессами, работающими на одном устройстве и одним из них является приложением UWP, необходимо включить замыкание на себя на себя localhost.

Замыкания на себя и отладчик

По умолчанию запуск в отладчике Visual Studio автоматически включает исходящий замыкания на себя только для этого сеанса отладки.  Вам не нужно ничего делать, если флажок замыкания на себя установлен в параметрах отладчика для запускаемого проекта.  Если вы хотите реализовать прослушиватель сокетов, необходимо включить замыкание на себя на себя для входящих подключений localhost (см. ниже).

Включение политики входящего замыкания на себя

Для приложений UWP, реализующих серверы, должна быть включена политика входящего замыкания на себя локального узла для Windows IoT Базовая . Эта политика управляется следующим разделом реестра:

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

Чтобы включить этот параметр реестра IoTInboundLoopbackPolicy, необходимо задать значение dword:00000001. При изменении значения реестра IoTInboundLoopbackPolicy необходимо перезагрузить, чтобы изменения вступили в силу.  Политика замыкания на себя локального узла должна быть включена по умолчанию в Windows IoT Базовая.

Чтобы убедиться, что значение задано, выполните следующую команду на устройстве Windows IoT Базовая :

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

Чтобы включить политику, выполните следующую команду на устройстве Windows IoT Базовая :

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

Включение замыкания на себя для приложения UWP

Перед включением замыкания на себя для приложения потребуется имя семейства пакетов. Имя семейства пакетов для установленного приложения можно найти, запустив список iotstartup. Если запись в списке iotstartup для приложения IoTCoreDefaultApp_1w720vyc4ccym! После этого имя семейства пакетов будет IoTCoreDefaultApp_1w720vyc4ccym

Чтобы включить замыкания на себя для клиентских подключений, используйте CheckNetIsolation.exe LoopbackExempt -a -n=<AppContainer or Package Family>. CheckNetIsolation.exe настроит замыкания на себя для приложения и завершит работу. Это позволит приложению устанавливать исходящие подключения к серверу.

Например, CheckNetIsolation.exe LoopbackExempt -a -n=IoTCoreDefaultApp_1w720vyc4ccym.

Чтобы серверное приложение получало входящие подключения, используйте .CheckNetIsolation.exe LoopbackExempt -is -n=<AppContainer or Package Family> В отличие от конфигурации исходящих подключений, для входящих подключений требуется непрерывное выполнение CheckNetIsolation.exe, пока серверное приложение получает подключения.  Для этого требуется сборка ОС новее 10.0.14393.

Например, CheckNetIsolation.exe LoopbackExempt -is -n=IoTCoreDefaultApp_1w720vyc4ccym.

Лучший способ запуска CheckNetIsolation.exe автоматически при запуске — использовать schtasks.exe: schtasks /create /tn MyTask /f /sc onstart /ru system /tr "checknetisolation LoopbackExempt -is -n=IoTCoreDefaultApp_1w720vyc4ccym"

После перезагрузки вы сможете убедиться, что checknetisolation.exe работает с помощью tlist.exe или портала устройств Windows.