Comunicazione con localhost (loopback)
In Windows IoT Core, se vuoi creare una connessione TCP/IP tra due processi in esecuzione nello stesso dispositivo e uno di essi è un'app UWP, devi abilitare il loopback localhost.
Loopback e debugger
Per impostazione predefinita, l'esecuzione nel debugger di Visual Studio abilita automaticamente il loopback in uscita solo per la sessione di debug. Non è necessario eseguire alcuna operazione purché la casella di controllo loopback sia selezionata nelle impostazioni del debugger per il progetto di avvio. Se si vuole implementare un listener socket, è necessario abilitare il loopback localhost per le connessioni in ingresso (vedere di seguito).
Abilitazione dei criteri di loopback in ingresso
I criteri di loopback in ingresso localhost per Windows IoT Core devono essere abilitati per le app UWP che implementano i server. Questo criterio è controllato dalla seguente chiave del Registro di sistema:
[HKEY_LOCAL_MACHINE\system\currentcontrolset\services\mpssvc\parameters]
"IoTInboundLoopbackPolicy"=dword:00000001
Questo valore della chiave del Registro di sistema IoTInboundLoopbackPolicy deve essere impostato su dword:00000001 per abilitare. Se si modifica il valore del Registro di sistema IoTInboundLoopbackPolicy, è necessario riavviare per rendere effettiva la modifica. I criteri di loopback localhost devono essere abilitati per impostazione predefinita in Windows IoT Core
Per verificare che il valore sia impostato, eseguire il comando seguente nel dispositivo Windows IoT Core :
reg query hklm\system\currentcontrolset\services\mpssvc\parameters /v IoTInboundLoopbackPolicy
Per abilitare il criterio, eseguire il comando seguente nel dispositivo Windows IoT Core :
reg add hklm\system\currentcontrolset\services\mpssvc\parameters /v IoTInboundLoopbackPolicy /t REG_DWORD /d 1
Abilitazione del loopback per un'applicazione UWP
Prima di abilitare il loopback per un'applicazione, è necessario il nome della famiglia di pacchetti. È possibile trovare il nome della famiglia di pacchetti per un'applicazione installata eseguendo l'elenco iotstartup. Se la voce dell'elenco iotstartup per l'applicazione è IoTCoreDefaultApp_1w720vyc4ccym! App quindi il nome della famiglia di pacchetti è IoTCoreDefaultApp_1w720vyc4ccym
Per abilitare il loopback per le connessioni client, usare CheckNetIsolation.exe LoopbackExempt -a -n=<AppContainer or Package Family>
. CheckNetIsolation.exe configurerà il loopback per l'applicazione ed esce. Ciò consentirà all'applicazione di stabilire connessioni in uscita a un server.
Esempio: CheckNetIsolation.exe LoopbackExempt -a -n=IoTCoreDefaultApp_1w720vyc4ccym
Per consentire a un'applicazione server di ricevere connessioni in ingresso, usare CheckNetIsolation.exe LoopbackExempt -is -n=<AppContainer or Package Family>
. A differenza della configurazione della connessione in uscita, le connessioni in ingresso richiedono CheckNetIsolation.exe l'esecuzione continua mentre l'applicazione server riceve le connessioni. Questa operazione richiede una build del sistema operativo più recente di 10.0.14393.
Esempio: CheckNetIsolation.exe LoopbackExempt -is -n=IoTCoreDefaultApp_1w720vyc4ccym
Il modo migliore per eseguire CheckNetIsolation.exe automaticamente all'avvio consiste nell'usare schtasks.exe: schtasks /create /tn MyTask /f /sc onstart /ru system /tr "checknetisolation LoopbackExempt -is -n=IoTCoreDefaultApp_1w720vyc4ccym"
Al riavvio, dovrebbe essere possibile verificare che checknetisolation.exe sia in esecuzione usando tlist.exe o Windows Device Portal