Eseguire l'upload di file dal dispositivo al cloud con l'hub IoT usando .NET

Questa esercitazione si basa sul codice dell'esercitazione Inviare messaggi da cloud a dispositivo con l'hub IoT che illustra come usare le funzionalità di caricamento di file dell'hub IoT. Illustra le operazioni seguenti:

  • Specificare in modo sicuro un dispositivo con un URI del BLOB di Azure per il caricamento di un file.
  • Usare le notifiche di caricamento di file dell'hub IoT per attivare l'elaborazione del file nel back-end dell'app.

Le esercitazioni Introduzione all'hub IoT e Inviare messaggi da cloud a dispositivo con l'hub IoT illustrano le funzionalità di messaggistica di base da dispositivo a cloud e da cloud a dispositivo dell'hub IoT. L'esercitazione Elaborare messaggi da dispositivo a cloud illustra come archiviare in modo affidabile i messaggi da dispositivo a cloud nell'archivio BLOB di Azure. Tuttavia in alcuni scenari non è possibile mappare facilmente i dati che i dispositivi inviano in messaggi relativamente ridotti da dispositivo a cloud, che l'hub IoT accetta. ad esempio:

  • File di grandi dimensioni che contengono immagini
  • Video
  • Dati di vibrazione campionati ad alta frequenza
  • Qualche tipo di dati pre-elaborati

Questi dati in genere vengono elaborati in batch nel cloud con strumenti come Azure Data Factory o lo stack Hadoop. Quando è necessario caricare i file da un dispositivo, è comunque possibile usare la sicurezza e affidabilità dell'hub IoT.

Al termine di questa esercitazione vengono eseguite due app console .NET:

  • SimulatedDevice, una versione modificata dell'applicazione creata nell'esercitazione Inviare messaggi da cloud a dispositivo con l'hub IoT. Ciò consente di caricare un file nell'archivio tramite un URI con firma di accesso condiviso fornito dall'hub IoT.
  • ReadFileUploadNotificationriceve le notifiche di caricamento file dall'hub IoT.
Nota

L'hub IoT supporta numerose piattaforme e linguaggi (inclusi C, Java e Javascript) tramite gli Azure IoT SDK per dispositivi. Vedere il Centro per sviluppatori di IoT di Azure per istruzioni dettagliate su come connettere il dispositivo all'Hub IoT di Azure.

Per completare l'esercitazione, sono necessari gli elementi seguenti:

  • Visual Studio 2015 o Visual Studio 2017
  • Un account Azure attivo. Se non si ha un account, è possibile creare un account gratuito in pochi minuti.

Associare un account di archiviazione di Azure all'hub IoT

Poiché l'app per dispositivo simulato carica un file in un BLOB, è necessario avere un account di Archiviazione di Azure associato all'hub IoT. Quando si associa un account di Archiviazione di Azure a un hub IoT, l'hub IoT genera un URI di firma di accesso condiviso. Un dispositivo può usare questo URI di firma di accesso condiviso per eseguire l'upload di un file in modo sicuro in un contenitore BLOB. Il servizio hub IoT e gli SDK di dispositivo coordinano il processo che genera l'URI di firma di accesso condiviso e lo rendono disponibile per un dispositivo che lo userà per caricare un file.

Seguire le istruzioni in Configurare i caricamenti dei file con il portale di Azure per associare un account di archiviazione di Azure all'hub IoT. Assicurarsi che un contenitore BLOB venga associato all'hub IoT e che siano abilitate le notifiche file.

Abilitazione di notifiche file nel portale

Caricare un file da un'app per dispositivi

In questa sezione si modifica l'app per dispositivi creata in Inviare messaggi da cloud a dispositivo con l'hub IoT per ricevere i messaggi da cloud a dispositivo dall'hub IoT.

  1. In Visual Studio fare clic con il pulsante destro del mouse sul progetto SimulatedDevice, scegliere Aggiungi e quindi Elemento esistente. Passare a un file di immagine e includerlo nel progetto. Nell'esercitazione si presuppone che l'immagine sia denominata image.jpg.

  2. Fare clic con il pulsante destro del mouse sull'immagine e quindi scegliere Proprietà. Controllare che Copia nella directory di output sia impostato su Copia sempre.

  3. Nel file Program.cs aggiungere le istruzioni seguenti all’inizio del file:

    using System.IO;
    
  4. Aggiungere il metodo seguente alla classe Program :

    private static async void SendToBlobAsync()
    {
        string fileName = "image.jpg";
        Console.WriteLine("Uploading file: {0}", fileName);
        var watch = System.Diagnostics.Stopwatch.StartNew();
    
        using (var sourceData = new FileStream(@"image.jpg", FileMode.Open))
        {
            await deviceClient.UploadToBlobAsync(fileName, sourceData);
        }
    
        watch.Stop();
        Console.WriteLine("Time to upload file: {0}ms\n", watch.ElapsedMilliseconds);
    }
    

    Il metodo UploadToBlobAsync accetta il nome del file e l'origine del flusso del file da caricare e gestisce il caricamento nell'archiviazione. Nell'app console viene visualizzato il tempo necessario per caricare il file.

  5. Aggiungere il metodo seguente al metodo Main immediatamente prima della riga Console.ReadLine():

    SendToBlobAsync();
    
Nota

Per semplicità, in questa esercitazione non si implementa alcun criterio di nuovi tentativi. Nel codice di produzione è consigliabile implementare criteri di ripetizione dei tentativi, ad esempio un backoff esponenziale, come indicato nell'articolo di MSDN Transient Fault Handling.

Ricevere la notifica di caricamento di un file

In questa sezione verrà scritta un'app console di .NET che riceve messaggi di notifica di caricamento dall'hub IoT.

  1. Nella soluzione di Visual Studio corrente creare un progetto di Windows in Visual C# usando il modello di progetto Applicazione console . Denominare il progetto ReadFileUploadNotification.

    Nuovo progetto in Visual Studio

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ReadFileUploadNotification e quindi scegliere Gestisci pacchetti NuGet....

  3. Nella finestra Gestisci pacchetti NuGet cercare Microsoft.Azure.Devices, fare clic su Installa e accettare le condizioni per l'utilizzo.

    L'azione consente di scaricare, installare e aggiungere un riferimento al pacchetto NuGet Azure IoT Service SDK nel progetto ReadFileUploadNotification.

  4. Nel file Program.cs aggiungere le istruzioni seguenti all’inizio del file:

    using Microsoft.Azure.Devices;
    
  5. Aggiungere i campi seguenti alla classe Program . Sostituire il valore del segnaposto con la stringa di connessione all'hub IoT da [Introduzione all'hub IoT]:

    static ServiceClient serviceClient;
    static string connectionString = "{iot hub connection string}";
    
  6. Aggiungere il metodo seguente alla classe Program :

    private async static void ReceiveFileUploadNotificationAsync()
    {
        var notificationReceiver = serviceClient.GetFileNotificationReceiver();
    
        Console.WriteLine("\nReceiving file upload notification from service");
        while (true)
        {
            var fileUploadNotification = await notificationReceiver.ReceiveAsync();
            if (fileUploadNotification == null) continue;
    
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("Received file upload noticiation: {0}", string.Join(", ", fileUploadNotification.BlobName));
            Console.ResetColor();
    
            await notificationReceiver.CompleteAsync(fileUploadNotification);
        }
    }
    

    Si noti che il modello di ricezione è identico a quello usato per ricevere messaggi da cloud a dispositivo dall'app per dispositivo.

  7. Aggiungere infine le righe seguenti al metodo Main :

    Console.WriteLine("Receive file upload notifications\n");
    serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
    ReceiveFileUploadNotificationAsync();
    Console.WriteLine("Press Enter to exit\n");
    Console.ReadLine();
    

Eseguire le applicazioni

A questo punto è possibile eseguire le applicazioni.

  1. In Visual Studio fare clic con il pulsante destro del mouse sulla soluzione e selezionare Imposta progetti di avvio. Selezionare Progetti di avvio multipli, quindi selezionare l'azione Avvia per ReadFileUploadNotification e SimulatedDevice.

  2. Premere F5. Si avviano entrambe le applicazioni. Verrà visualizzato il messaggio di completamento del caricamento in un'applicazione console e il messaggio di notifica di caricamento ricevuto da altre applicazioni console. È possibile usare il portale di Azure o Esplora server di Visual Studio per verificare la presenza del file caricato nell'account di archiviazione di Azure.

Passaggi successivi

In questa esercitazione si è appreso come usare le funzionalità di caricamento file dell'hub IoT per semplificare i caricamenti di file dai dispositivi. È possibile continuare a esplorare le funzionalità e gli scenari dell'hub IoT vedendo i seguenti articoli:

Per altre informazioni sulle funzionalità dell'hub IoT, vedere: