Windows Dev Center

Sviluppo delle applicazioni connesse

Questo articolo fornisce un insieme di considerazioni sulla rete utili a tutte le app di Windows Store connesse.

Introduzione

Windows 8 introduce il nuovo Windows Runtime con un semplice e potente insieme di API che gli sviluppatori possono usare per creare app in C++, C# o JavaScript. Una delle proprietà più importanti delle app di Windows Store è che nella maggior parte dei casi saranno "connesse".

Questo documento definisce un'app connessa, o presente in rete, ad esempio un'app di Windows Store che desidera usare la rete per ogni attività. Tutte le app connesse dovranno attenersi alle seguenti linee guida per poter fornire agli utenti un'esperienza divertente e prevedibile.

Scelta della funzionalità di rete appropriata

Per avere accesso alle risorse di rete le app devono dichiarare funzionalità di isolamento della rete. Usa l'elenco di controllo per assicurarti che l'isolamento della rete sia configurato per la tua app.

  • Determina la direzione dell'accesso alla rete richiesto dall'app. Può trattarsi di richieste inizializzate sul lato client in uscita o di richieste non sollecitate in entrata oppure di una combinazione di entrambi.
  • Determina il tipo di risorse di rete con le quali comunicherà l'app. Valuta se l'app deve comunicare con risorse fidate su una rete domestica, una rete aziendale, Internet o una combinazione di tutti questi tipi di rete.
  • Configura le funzionalità di isolamento della rete minime necessarie nel manifesto dell'app. A questo scopo puoi utilizzare Microsoft Visual Studio Express 2012 per Windows 8 durante lo sviluppo dell'app.
  • Distribuisci ed esegui la tua app per testarla usando gli strumenti di isolamento della rete forniti per la risoluzione dei problemi.

Le funzionalità dichiarate vengono applicate da Windows. Le app devono seguire il principio del numero minimo di privilegi e aggiungere solo le funzionalità di cui hanno bisogno. La tabella seguente illustra in dettaglio le funzionalità di isolamento della rete.

Funzionalità di reteDescrizione

Internet (Client)

Fornisce l'accesso in uscita a Internet e alle reti nei luoghi pubblici, come aeroporti e bar. La maggior parte delle app che richiedono accesso a Internet deve dichiarare questa funzionalità.

Nota  

Dichiarata come internetClient nel manifesto dell'app.

Internet (Client & Server)

Fornisce l'accesso in entrata e in uscita a Internet e alle reti nei luoghi pubblici, come aeroporti e bar. L'accesso in entrata verso le porte critiche è sempre bloccato.

Questa funzionalità è un soprainsieme della funzionalità Internet (Client), perciò non è necessario dichiarare entrambe.

Nota  

Dichiarata come internetClientServer nel manifesto dell'app.

Private Networks (Client & Server)

Fornisce l'accesso alla rete in entrata e in uscita in luoghi attendibili, ad esempio a casa o al lavoro. L'accesso in entrata verso le porte critiche è sempre bloccato.

Dichiarata come privateNetworkClientServer nel manifesto dell'app.

 

È possibile che per l'app connessa siano necessari altri certificati, come quelli che forniscono il riconoscimento della prossimità del dispositivo o i certificati utente condivisi. Altre informazioni sulle funzionalità di dichiarazione e isolamento della rete sono disponibili in Come configurare le funzionalità di isolamento della rete.

Selezione dell'API corretta

Windows Runtime fornisce supporto per diverse API di rete per la comunicazione con endpoint remoti su Internet o in reti private. Nei casi in cui uno specifico protocollo di alto livello non sia disponibile per lo sviluppo tramite API, Windows Runtime supporta anche socket TCP e UDP, insieme a multicast, per consentire agli sviluppatori di implementare altri protocolli di alto livello.

Applicazioni interessate

Questa procedura interessa tutte le app di Windows Store che hanno bisogno di inviare o ricevere dati sulla rete.

Guida

Primo, determinare la funzionalità desiderata per la propria app. Se la funzionalità è inserita in una delle aree di funzionalità seguenti, usa direttamente queste API.

APIFunzionalità

Windows.Web.AtomPub, Windows.Web.Syndication

Le API per il recupero dei feed nei formati RSS o Atom tra più versioni. Windows Runtime supporta anche Atom Publication Protocol, abilitando la pubblicazione di raccolte Atom. Inoltre, tali API facilitano l'implementazione del supporto per i formati più recenti, ad esempio OData.

Windows.Networking.BackgroundTransfer

API usate per il download/upload di contenuto ininterrotto, consapevole dei costi e con capacità di ripresa, anche quando l'applicazione chiamante non è in primo piano. Questa API supporta il download usando protocolli HTTP, HTTPS e FTP.

XMLHTTPRequest (JavaScript), HttpClient (C#), IXHR2 (C++).

API usate per interagire con i servizi Web RESTful e altri protocolli basati su HTTP.

Windows.Networking.Proximity

API usate per rilevare la vicinanza attraverso cui le applicazioni possono attivare la comunicazione di rete tra due dispositivi usando Socket API.

Windows.Storage.Pickers

Le API usate per comunicare con condivisione file remote, ad esempio salvare un file in una condivisione file remota, devono usare le API di selezione file.

 

Se un'API con la funzionalità desiderata non è inclusa nell'elenco precedente, usa le nuove API Windows.Networking.Sockets. Tuttavia, le app che usano queste API devono tenere presente quanto segue:

  • Windows 8 introduce un nuovo tipo di socket, chiamato "WebSocket". Riportiamo alcune considerazioni che ti aiuteranno a decidere quando usare i vari tipi di socket (UDP, TCP o Websockets).

    • Se sei connesso a un servizio che usa un protocollo non supportato dalle API descritte in questa sezione, come SMTP, MAPI o telnet, usa socket TCP o UDP.

    • Se hai bisogno di connetterti a un altro dispositivo nella stessa rete locale, usa socket TCP o UDP.

    • Se hai bisogno di un semplice protocollo di richiesta e risposta che possa comunicare tramite proxy HTTP, usa le API REST precedentemente descritte. (C++, C#, JavaScript).

    • Se stai creando un'app che richiede una semantica simile a socket (asincrona, bidirezionale) per connettersi sul Web, anche tramite proxy HTTP, a un nuovo servizio che stai creando, usa WebSockets.

  • Usa i nomi per indirizzare gli endpoint. Evita l'uso di indirizzi IP, inclusi gli IP letterari in URIs, per indirizzare gli endpoint perché gli indirizzi IP possono cambiare, mentre il nome in genere no. Usando un nome, si dovrebbe garantire la connessione all'indirizzo IP corrente per l'endpoint.

  • Le API Windows solitamente usano stringhe Unicode come formato nativo, anche per HostNames e URIs. Tuttavia, un certo protocollo può richiedere un formato differente. A tale scopo, assicurarsi di convertire le stringhe in qualunque formato richiesto dal protocollo usando il metodi di classe DataReader/DataWriter.

  • HostNames e URIs devono essere implementati come oggetti della classe, non come stringhe, quando si confronta l'uguaglianza perché le regole di eguaglianza hanno oggetti differenti.

  • Registra le notifiche di modifica di rete e segui le linee guida secondo quanto descritto in Risposta ai cambiamenti di stato della rete.

Adattamento del comportamento di un'app per reti a consumo

Le reti a consumo esistono da molto tempo in Internet. Ad esempio, molti ISP hanno una soglia, solitamente abbastanza alta, alla quantità di dati che gli utenti possono trasferire mensilmente. Recentemente, l'aumento della popolarità di tecnologie mobile broadband ha accentuato il problema per quanto riguarda il superamento della soglia alla quantità di dati e perché il roaming può essere a carico dell'utente. Quindi, le applicazioni hanno bisogno di monitorare le risorse di rete disponibili e comportarsi di conseguenza.

Nella tabella seguente sono elencati i possibili costi di connessione secondo quanto definito da Windows.Networking.Connectivity.ConnectionCost.

ProprietàDescrizione

ApproachingDataLimit

Recupera un valore che indica se una connessione si sta avvicinando alla soglia di utilizzo specificata nel piano dati.

NetworkCostType

Recupera un valore che indica il costo di rete corrente di una connessione.

  • Unrestricted: L'uso di questa connessione di rete è illimitato. Ha un costo di utilizzo illimitato e vincoli di capacità.

  • Fixed: L'uso di questa connessione di rete ha un limite specifico.

  • Variable: L'uso di questa connessione è calcolato a byte.

  • Unknown: Informazioni sui costi di questa connessione di rete non disponibili.

OverDataLimit

Recupera un valore che indica se una connessione ha superato la soglia di utilizzo specificata nel piano dati.

Roaming

Recupera un valore che indica se la connessione è collegata o meno a una rete esterna al provider della rete domestica.

 

Applicazioni interessate

In genere, tutte le app, in particolare quelle in cui viene trasferita una grande quantità di dati, devono attenersi alle istruzioni seguenti:

Gli utenti sono in grado di determinare la quantità di larghezza di banda usata dalle singole applicazioni. Un uso improprio dell'ampiezza di banda a consumo può danneggiare la reputazione dell'app e della società

Guidance

Le app che si connettono a destinazioni su Internet devono ottenere informazioni sui costi della rete su cui stanno inviando o da cui ricevono dati con GetInternetConnectionProfile. A seconda dei limiti imposti dalla portante al trasferimento dei dati, ti consigliamo di seguire le linee guida seguenti:

Comportamento Linee guida
Normale

In scenari normali, l'app non dovrebbe implementare restrizioni. La connessione deve essere trattata come 'illimitata' dal punto di vista dei costi e senza restrizioni per quanto riguarda i costi di utilizzo e i vincoli di capacità.

Se NetworkCostType è "Unrestricted" o "Unknown" e ConnectionCost non è "Roaming", l'app deve implementare un comportamento normale.

Esempi:

  • L'app lettore multimediale può riprodurre per intero un film in HD.

  • Un'app può scaricare un file di grandi dimensioni senza restrizioni né richieste.

Prudente

Negli scenari più prudenti l'app deve implementare restrizioni per ottimizzare l'uso della rete e gestire le operazioni sulle reti a consumo.

Se NetworkCostType è "Fixed" o "Variable" e ConnectionCost non è "Roaming" o "OverDataLimit", l'app deve implementare un comportamento prudente.

Esempi:

  • L'app lettore multimediale può riprodurre filmati in risoluzioni inferiori.

  • Un'app può ritardare i download che non sono di importanza critica.

  • Un'app può evitare la prelettura delle informazioni in rete.

  • Le app di posta elettronica possono passare alla modalità di sola intestazione per la ricezione di messaggi e-mail.

Consenso esplicito

Negli scenari di consenso esplicito, l'app deve gestire casi eccezionali in cui il costo di accesso alla rete è significativamente superiore a quello del piano a consumo. Ad esempio, quando l'utente si collega in mobilità, le tariffe applicate dal gestore mobile possono essere sensibilmente più elevate.

Se ConnectionCost è "Roaming" o "OverDataLimit" l'app deve implementare il comportamento di consenso esplicito.

Esempi:

  • L'app deve richiedere all'utente se accedere alla rete.

  • L'app deve sospendere tutte le attività di rete in background.

 

Risposta ai cambiamenti di stato della rete

Quando Windows 8 rileva nuove reti, fornisce automaticamente nuove opzioni di connessione. Ad esempio, se un utente usa una rete 3G per inviare dati e poi trova una gamma di reti Wi-Fi, l'app può sfruttare la nuova opzione di connessione nel caso sia conveniente.

Quando si usano i dispositivi mobili, la connettività di rete non sempre è costante. Una rete 3G può uscire dalla copertura all'interno della casa o garage dell'utente mentre la rete Wi-Fi resta disponibile. Anche il Wi-Fi potrebbe disconnettersi se un utente esce di casa. In alcuni casi, inoltre, non è disponibile alcuna rete. Con il proliferare di reti Mobile Broadband e Wi-Fi, questi cambiamenti di stato (connettività non costante o nessuna rete disponibile) diventeranno comuni. Le connessioni non passano in modo automatico e diretto a una nuova rete, ma è necessario coinvolgere le applicazioni. Nota che, in base ai criteri predefiniti di Windows 8, vengono preferite reti senza restrizioni a quelle a consumo e reti più veloci a quelle più lente.

Applicazioni interessate

Tutte la app di Windows Store che usano una rete sono interessate dal problema e il mancato rispetto di queste linee guida può causare un'esperienza utente insoddisfacente ad ogni cambio di rete.

Guida

Tutte le app di Windows Store dovrebbero attenersi ai passaggi seguenti:

  1. Se la connessione usata dall'app non è più disponibile (come indicato da un messaggio di errore):

    1. Controlla il costo della connessione a Internet.

    2. Prova a connetterti di nuovo. Se il tentativo non riesce, attendi un'altra notifica di tipo NetworkStatusChanged.

  2. Verificare il costo di una connessione a Internet, quindi adattare il proprio comportamento come consigliato in Adattamento del comportamento per reti a consumo.

  3. Registrare le notifiche di modifica dello stato di rete (onNetworkStatusChanged).

  4. Avviare le operazioni di rete usando una delle API descritte in Selezione dell'API corretta.

  5. Una notifica di modifica dello stato di rete indica che le opzioni di connettività o di costi disponibile possono variare. Quando si riceve questa notifica, esegui le operazioni seguenti:

    1. Controlla il costo della connessione a Internet. Se le caratteristiche di costo della connessione sono cambiate (da gratuita a pagamento o viceversa), prova a rieseguire l'operazione di rete. Windows 8 usa automaticamente la rete migliore o quella a costo più basso disponibile. Se il tentativo riesce, annulla l'operazione di rete originale.

      Nota  Gli sviluppatori avanzati possono anche scegliere di ottimizzare il comportamento dell'app quando provano a rieseguire operazioni di rete. Ad esempio, potresti sostituire una connessione esistente con una nuova su una rete a maggiore velocità. In questo scenario, uno sviluppatore può usare API Socket API (BandwidthStatistics) per determinare l'eventuale scelta.
    2. Se le caratteristiche di costo della connessione a Internet non sono cambiate, ma si riceve una notifica sul costo, ad esempio che è stato consumato oltre l'80% del tetto massimo oppure relativa a costi variabili, roaming e così via, adattare il comportamento.

Debugging e risoluzione dei problemi delle app connesse

Guasti alla rete possono causare il blocco o l'arresto delle app o visualizzare caselle di dialogo non funzionanti e messaggi di errore per gli utenti poco chiari. Provvedere al debugging di questi errori non è sempre facile, perché possono verificarsi in qualsiasi punto dello stack di rete.

Applicazioni interessate

Sono interessate tutte le app di Windows Store che usano la rete direttamente, mediante socket, o indirettamente, mediante un'API che usa una rete. La situazione ideale si verifica quando il sistema operativo gestisce automaticamente le condizioni di errore al posto dello sviluppatore e, nel caso non riesca, le app siano pronte a risolverle.

Guida

Per la tua app di Windows Store, osserva quanto segue:

  • Quando si verifica un errore di rete, prova a rieseguire l'operazione, se appropriato. Ad esempio, non rieseguire l'operazione se l'autenticazione non riesce ma eseguila nuovamente se la rete con cui stavi comunicando non è più disponibile perché un'altra potrebbe essere disponibile. Molti errori vengono risolti semplicemente eseguendo nuovamente l'operazione. Per questo tentativo, segui le linee guida specificate in precedenza in Risposta ai cambiamenti di stato della rete.

  • Usa API asincrone, in modo che non vi siano chiamate bloccanti sul thread dell'interfaccia utente. In altre parole, se un'operazione di rete richiede molto tempo per il completamento o si verifica un errore, la tua applicazione non dovrebbe bloccarsi. Non emulare un comportamento sincrono sovrastando la natura asincrona di Windows Runtime.

  • In una situazione ideale, tutti i modelli per la gestione degli errori sono stati pianificati in precedenza. Durante la progettazione dell'app, valuta attentamente come esporre all'utente le informazioni sugli errori. Outlook, ad esempio, usa un semplice indicatore di rete, Communicator prevede la sostituzione dell'intera interfaccia utente e Internet Explorer include una finestra di dialogo orientata ad attività per i download durante i quali vengono visualizzati messaggi di errore di rete. Intercetta le eccezioni nei casi in cui un'eccezione viene generata, comprendi tutte le stringhe di errore e informa adeguatamente l'utente.

  • Verifica l'app in vari ambienti di rete, provando a disconnetterti e riconnetterti alla rete, sospendere o riprendere il collegamento o passare da una rete a un'altra.

  • Quando verifichi il funzionamento dell'app alla ricerca degli errori meno prevedibili, abilita la traccia ETW.

Risorse

La documentazione seguente fornisce linee guida e dettagli su API per funzionalità Windows Runtime descritte in questo argomento:

Istruzioni sull'implementazione delle funzionalità

Aggiunta del supporto di rete
Connessione a un servizio Web
Connessione ai servizi di rete
Connessione a un servizio WebSocket
Accesso alle informazioni relative a connessione e piano dati
Trasferimento di un file da una risorsa di rete
Accesso e gestione di contenuto diffuso su diversi canali

Esempi di codice

Documentazione sugli spazi dei nomi

Windows.Networking.BackgroundTransfer
Windows.Networking.Connectivity
Windows.Networking.Proximity
Windows.Networking.Sockets
Windows.Storage.Picker
Windows.Web.AtomPub
Windows.Data.Html
Windows.Web.Syndication
Windows.Foundation (Uri Class)
Windows.Networking (HostName Class)
Windows.Storage.Streams (DataReader/DataWriter Classes)

 

 

Mostra:
© 2015 Microsoft