Eseguire l'upload di file dal dispositivo al cloud con l'hub IoT usando .NETUpload files from your device to the cloud with IoT Hub using .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.This tutorial builds on the code in the Send Cloud-to-Device messages with IoT Hub tutorial to show you how to use the file upload capabilities of IoT Hub. Illustra le operazioni seguenti:It shows you how to:

  • Specificare in modo sicuro un dispositivo con un URI del BLOB di Azure per il caricamento di un file.Securely provide a device with an Azure blob URI for uploading a file.
  • Usare le notifiche di caricamento di file dell'hub IoT per attivare l'elaborazione del file nel back-end dell'app.Use the IoT Hub file upload notifications to trigger processing the file in your app back end.

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.The Get started with IoT Hub and Send Cloud-to-Device messages with IoT Hub tutorials show the basic device-to-cloud and cloud-to-device messaging functionality of IoT Hub. 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.The Process Device-to-Cloud messages tutorial describes a way to reliably store device-to-cloud messages in Azure blob storage. 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.However, in some scenarios you cannot easily map the data your devices send into the relatively small device-to-cloud messages that IoT Hub accepts. ad esempio:For example:

  • File di grandi dimensioni che contengono immaginiLarge files that contain images
  • VideoVideos
  • Dati di vibrazione campionati ad alta frequenzaVibration data sampled at high frequency
  • Qualche tipo di dati pre-elaboratiSome form of preprocessed data

Questi dati in genere vengono elaborati in batch nel cloud con strumenti come Azure Data Factory o lo stack Hadoop.These files are typically batch processed in the cloud using tools such as Azure Data Factory or the Hadoop stack. Quando è necessario caricare i file da un dispositivo, è comunque possibile usare la sicurezza e affidabilità dell'hub IoT.When you need to upload files from a device, you can still use the security and reliability of IoT Hub.

Al termine di questa esercitazione vengono eseguite due app console .NET:At the end of this tutorial you run two .NET console apps:

  • SimulatedDevice, una versione modificata dell'applicazione creata nell'esercitazione Inviare messaggi da cloud a dispositivo con l'hub IoT.SimulatedDevice, a modified version of the app created in the Send Cloud-to-Device messages with IoT Hub tutorial. Ciò consente di caricare un file nell'archivio tramite un URI con firma di accesso condiviso fornito dall'hub IoT.This app uploads a file to storage using a SAS URI provided by your IoT hub.
  • ReadFileUploadNotificationriceve le notifiche di caricamento file dall'hub IoT.ReadFileUploadNotification, which receives file upload notifications from your IoT hub.

Nota

L'hub IoT supporta numerose piattaforme e linguaggi (inclusi C, Java e Javascript) tramite gli Azure IoT SDK per dispositivi.IoT Hub supports many device platforms and languages (including C, Java, and Javascript) through Azure IoT device SDKs. Vedere il Centro per sviluppatori di IoT di Azure per istruzioni dettagliate su come connettere il dispositivo all'Hub IoT di Azure.Refer to the [Azure IoT Developer Center] for step-by-step instructions on how to connect your device to Azure IoT Hub.

Per completare l'esercitazione, sono necessari gli elementi seguenti:To complete this tutorial, you need the following:

  • Visual Studio 2015 o Visual Studio 2017Visual Studio 2015 or Visual Studio 2017
  • Un account Azure attivo.An active Azure account. Se non si ha un account, è possibile creare un account gratuito in pochi minuti.(If you don't have an account, you can create a free account in just a couple of minutes.)

Associare un account di archiviazione di Azure all'hub IoTAssociate an Azure Storage account to IoT Hub

Poiché l'app per dispositivo simulato carica un file in un BLOB, è necessario avere un account di Archiviazione di Azure associato all'hub IoT.Because the simulated device app uploads a file to a blob, you must have an Azure Storage account associated to IoT Hub. Quando si associa un account di Archiviazione di Azure a un hub IoT, l'hub IoT genera un URI di firma di accesso condiviso.When you associate an Azure Storage account with an IoT hub, the IoT hub generates a SAS URI. 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.A device can use this SAS URI to securely upload a file to a blob container. 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.The IoT Hub service and the device SDKs coordinate the process that generates the SAS URI and makes it available to a device to use to upload a 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.Follow the instructions in Configure file uploads using the Azure portal to associate an Azure Storage account to your IoT hub. Assicurarsi che un contenitore BLOB venga associato all'hub IoT e che siano abilitate le notifiche file.Make sure that a blob container is associated with your IoT hub and that file notifications are enabled.

Abilitazione di notifiche file nel portale

Caricare un file da un'app per dispositiviUpload a file from a device app

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.In this section, you modify the device app you created in Send Cloud-to-Device messages with IoT Hub to receive cloud-to-device messages from the IoT hub.

  1. In Visual Studio fare clic con il pulsante destro del mouse sul progetto SimulatedDevice, scegliere Aggiungi e quindi Elemento esistente.In Visual Studio, right-click the SimulatedDevice project, click Add, and then click Existing Item. Passare a un file di immagine e includerlo nel progetto.Navigate to an image file and include it in your project. Nell'esercitazione si presuppone che l'immagine sia denominata image.jpg.This tutorial assumes the image is named image.jpg.

  2. Fare clic con il pulsante destro del mouse sull'immagine e quindi scegliere Proprietà.Right-click on the image, and then click Properties. Controllare che Copia nella directory di output sia impostato su Copia sempre.Make sure that Copy to Output Directory is set to Copy always.

  3. Nel file Program.cs aggiungere le istruzioni seguenti all’inizio del file:In the Program.cs file, add the following statements at the top of the file:

    using System.IO;
    
  4. Aggiungere il metodo seguente alla classe Program :Add the following method to the Program class:

    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.The UploadToBlobAsync method takes in the file name and stream source of the file to be uploaded and handles the upload to storage. Nell'app console viene visualizzato il tempo necessario per caricare il file.The console app displays the time it takes to upload the file.

  5. Aggiungere il metodo seguente al metodo Main immediatamente prima della riga Console.ReadLine():Add the following method in the Main method, right before the Console.ReadLine() line:

    SendToBlobAsync();
    

Nota

Per semplicità, in questa esercitazione non si implementa alcun criterio di nuovi tentativi.For simplicity's sake, this tutorial does not implement any retry policy. 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.In production code, you should implement retry policies (such as exponential backoff), as suggested in the MSDN article Transient Fault Handling.

Ricevere la notifica di caricamento di un fileReceive a file upload notification

In questa sezione verrà scritta un'app console di .NET che riceve messaggi di notifica di caricamento dall'hub IoT.In this section, you write a .NET console app that receives file upload notification messages from IoT Hub.

  1. Nella soluzione di Visual Studio corrente creare un progetto di Windows in Visual C# usando il modello di progetto Applicazione console .In the current Visual Studio solution, create a Visual C# Windows project by using the Console Application project template. Denominare il progetto ReadFileUploadNotification.Name the project 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....In Solution Explorer, right-click the ReadFileUploadNotification project, and then click Manage NuGet Packages....

  3. Nella finestra Gestisci pacchetti NuGet cercare Microsoft.Azure.Devices, fare clic su Installa e accettare le condizioni per l'utilizzo.In the NuGet Package Manager window, search for Microsoft.Azure.Devices, click Install, and accept the terms of use.

    L'azione consente di scaricare, installare e aggiungere un riferimento al pacchetto NuGet Azure IoT Service SDK nel progetto ReadFileUploadNotification.This action downloads, installs, and adds a reference to the [Azure IoT service SDK NuGet package] in the ReadFileUploadNotification project.

  4. Nel file Program.cs aggiungere le istruzioni seguenti all’inizio del file:In the Program.cs file, add the following statements at the top of the file:

    using Microsoft.Azure.Devices;
    
  5. Aggiungere i campi seguenti alla classe Program .Add the following fields to the Program class. Sostituire il valore del segnaposto con la stringa di connessione all'hub IoT da [Introduzione all'hub IoT]:Substitute the placeholder value with the IoT hub connection string from [Get started with IoT Hub]:

    static ServiceClient serviceClient;
    static string connectionString = "{iot hub connection string}";
    
  6. Aggiungere il metodo seguente alla classe Program :Add the following method to the Program class:

    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.Note this receive pattern is the same one used to receive cloud-to-device messages from the device app.

  7. Aggiungere infine le righe seguenti al metodo Main :Finally, add the following lines to the Main method:

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

Eseguire le applicazioniRun the applications

A questo punto è possibile eseguire le applicazioni.Now you are ready to run the applications.

  1. In Visual Studio fare clic con il pulsante destro del mouse sulla soluzione e selezionare Imposta progetti di avvio.In Visual Studio, right-click your solution, and select Set StartUp projects. Selezionare Progetti di avvio multipli, quindi selezionare l'azione Avvia per ReadFileUploadNotification e SimulatedDevice.Select Multiple startup projects, then select the Start action for ReadFileUploadNotification and SimulatedDevice.

  2. Premere F5.Press F5. Si avviano entrambe le applicazioni.Both applications should start. Verrà visualizzato il messaggio di completamento del caricamento in un'applicazione console e il messaggio di notifica di caricamento ricevuto da altre applicazioni console.You should see the upload completed in one console app and the upload notification message received by the other console app. È 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.You can use the [Azure portal] or Visual Studio Server Explorer to check for the presence of the uploaded file in your Azure Storage account.

Passaggi successiviNext steps

In questa esercitazione si è appreso come usare le funzionalità di caricamento file dell'hub IoT per semplificare i caricamenti di file dai dispositivi.In this tutorial, you learned how to use the file upload capabilities of IoT Hub to simplify file uploads from devices. È possibile continuare a esplorare le funzionalità e gli scenari dell'hub IoT vedendo i seguenti articoli:You can continue to explore IoT hub features and scenarios with the following articles:

Per altre informazioni sulle funzionalità dell'hub IoT, vedere:To further explore the capabilities of IoT Hub, see: