Esercizio: Creare e testare una funzione di Azure semplice in locale con Visual Studio

Completato

Visual Studio offre un ambiente eccellente per creare e testare un'app per le funzioni di Azure. È possibile sviluppare una funzione di Azure in locale e verificarne il corretto funzionamento prima di distribuirla nel cloud.

Nello scenario del sito Web di vendita online di orologi di lusso è richiesta una funzione che restituisce informazioni dettagliate su un orologio in base al numero di modello dell'orologio fornito. I dati che devono essere restituiti includono il produttore, il tipo di cassa posteriore (tinta unita, trasparente o con incisioni), la lunetta, lo stile del quadrante, la finitura della cassa, il numero di rubini e così via.

In questo esercizio si implementa e si testa una versione di questa funzione in locale usando Visual Studio.

Nota

Prima di iniziare questo esercizio, assicurarsi di aver installato Visual Studio 2022, insieme alle estensioni del carico di lavoro Web e cloud, ovvero Sviluppo ASP.NET e Web e Sviluppo di Azure.

Creare un'app per le funzioni di Azure

Creare un'app per le funzioni di Azure usando un modello di Funzioni di Azure.

  1. Avviare il programma di installazione di Visual Studio e nella pagina iniziale di Visual Studio 2022 selezionare Modifica.

  2. Assicurarsi che Sviluppo ASP.NET e Web e Sviluppo di Azure siano selezionati e disponibili (in caso contrario, selezionare Installa durante il download) e quindi selezionare Chiudi.

    Screenshot di Visual Studio 2022 con i carichi di lavoro di sviluppo di Azure e ASP.NET evidenziati.

  3. Nella pagina iniziale di Visual Studio 2022 selezionare Avvia.

  4. Nel menu Attività iniziali selezionare Crea un nuovo progetto. Viene visualizzata la pagina Crea un nuovo progetto.

  5. Cercare o scorrere fino al modello di Funzioni di Azure e quindi fare clic su Avanti.

    Screenshot della pagina Crea un nuovo progetto di Visual Studio 2022 con il modello di Funzioni di Azure evidenziato.

  6. Viene visualizzata la pagina Configura il nuovo progetto. Immettere i valori seguenti.

    Campo valore
    Nome progetto WatchPortalFunction
    Location Selezionare un percorso per archiviare il progetto passando a una cartella o creando una cartella nel computer locale.
    Nome soluzione Accettare WatchPortalFunction (impostazione predefinita).
    L'opzione Inserisci soluzione e progetto nella stessa directory deve essere deselezionata (NON selezionata). Questa impostazione garantisce la struttura di cartelle corretta per questo modulo.

    Screenshot della pagina Configura il nuovo progetto con l'opzione Crea evidenziata.

  7. Selezionare Avanti.

  8. Viene visualizzata la pagina Informazioni aggiuntive.

  9. Selezionare i valori seguenti.

    Campo valore
    Versione .NET *.NET 6.0 (supporto a lungo termine)
    Trigger di funzione Trigger HTTP
    Usare Azurite per l'account storage di runtime (AzureWebJobsStorage) Selezionato
    Abilita Docker Non selezionato
    Livello di autorizzazione Anonimo

    Se una notifica di Visual Studio indica che gli aggiornamenti sono pronti, selezionare Aggiorna.

  10. Seleziona Crea.

    Screenshot che mostra i trigger di Funzioni di Azure con l'opzione Trigger HTTP evidenziata.

    Visual Studio crea il progetto WatchPortalFunction e visualizza il file del codice sorgente dell'app per le funzioni Function1.cs nella finestra dell'editor di codice. Il file contiene il codice per una classe denominata Function1.

    Come illustrato nel codice di esempio seguente, la classe Function1 contiene il codice boilerplate dal modello di trigger HTTP. Il metodo Run è annotato con l'attributo [FunctionName ("Function1")]. Nell'unità precedente è stato illustrato che i parametri boilerplate per il metodo Run sono un oggetto HttpRequest contenente i dettagli della richiesta che ha attivato la funzione e una voce del log di traccia per la registrazione delle informazioni di traccia.

    namespace WatchPortalFunction
    {
        public static class Function1
        {
            [FunctionName("Function1")]
            public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
            {
                log.LogInformation("C# HTTP trigger function processed a request.");
    
                string name = req.Query["name"];
    
                string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
                dynamic data = JsonConvert.DeserializeObject(requestBody);
                name = name ?? data?.name;
    
                return name != null
                    ? (ActionResult)new OkObjectResult($"Hello, {name}")
                    : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
            }
        }
    }
    

Creare la funzione di Azure WatchInfo

  1. Scegliere Esplora soluzioni dal menu Visualizza. Nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di Funzioni di Azure WatchPortalFunction e scegliere Aggiungi>Nuova funzione di Azure dal menu di scelta rapida.

    Screenshot della finestra Esplora soluzioni. L'utente ha selezionato Aggiungi -> Nuova funzione di Azure.

  2. Nella finestra Aggiungi nuovo elemento - WatchPortalFunction selezionare Funzione di Azure. Nel campo Nome immettere WatchInfo.cs e quindi selezionare Aggiungi.

    Screenshot della finestra Aggiungi nuovo elemento. Il modello di funzione di Azure è selezionato e la nuova funzione è denominata WatchInfo.cs.

  3. Nella finestra Nuova funzione di Azure - WatchInfo selezionare Trigger HTTP. Nell'elenco a discesa Livello di autorizzazione selezionare Anonimo e quindi Aggiungi.

    Screenshot della finestra Nuova funzione di Azure. L'opzione Trigger HTTP con diritti di accesso anonimo è selezionata.

    Visual Studio crea una nuova funzione e il metodo Run viene annotato con l'attributo [FunctionName("WatchInfo")].

  4. Nel corpo della funzione Run eliminare il codice dopo la riga log.LogInformation. Il risultato dovrebbe avere l'aspetto seguente.

    namespace WatchPortalFunction
    {
        public static class WatchInfo
        {
            [FunctionName("WatchInfo")]
            public static async Task<IActionResult> Run(
                [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
                ILogger log)
            {
                log.LogInformation("C# HTTP trigger function processed a request.");
            }
        }
    }
    
  5. Inserire il codice seguente nel corpo del metodo Run, dopo la riga log.LogInformation.

    // Retrieve the model id from the query string
    string model = req.Query["model"];
    
    // If the user specified a model id, find the details of the model of watch
    if (model != null)
    {
        // Use dummy data for this example
        dynamic watchinfo = new { Manufacturer = "abc", CaseType = "Solid", Bezel = "Titanium", Dial = "Roman", CaseFinish = "Silver", Jewels = 15 };
    
        return (ActionResult)new OkObjectResult($"Watch Details: {watchinfo.Manufacturer}, {watchinfo.CaseType}, {watchinfo.Bezel}, {watchinfo.Dial}, {watchinfo.CaseFinish}, {watchinfo.Jewels}");
    }
    return new BadRequestObjectResult("Please provide a watch model in the query string");
    

    Questo codice legge il parametro model dalla stringa di query nella richiesta HTTP e restituisce i dettagli per il modello di orologio specifico. In questo codice di esempio sono stati creati dati fittizi watchinfo restituiti indipendentemente dal valore di model. La funzione restituisce una risposta che contiene questi dati. In alternativa, se la richiesta HTTP non include una stringa di query, la funzione restituisce un messaggio di errore. In un esempio reale si userebbe il valore model per eseguire una ricerca del valore watchinfo corretto da restituire.

Testare la funzione di Azure in locale

  1. Sulla barra dei comandi selezionare Debug>Avvia debug.

    Visual Studio crea l'app per le funzioni di Azure e avvia il runtime di Funzioni di Azure. Verrà visualizzata una finestra Output per visualizzare i messaggi all'avvio del runtime. Quando il runtime è pronto, viene visualizzato un elenco delle funzioni HTTP con l'URL che è possibile usare per attivare ogni funzione.

    Screenshot della finestra del runtime di Funzioni di Azure. Il runtime avvia l'app per le funzioni di Azure e visualizza gli URL per le funzioni 'Function1' e 'WatchInfo' di Azure.

  2. Aprire un Web browser e immettere l'URL visualizzato nella finestra di runtime. L'URL predefinito è http://localhost:7071/api/WatchInfo?model=abc, quindi viene usato in questo esercizio. Questa richiesta attiva la funzione WatchInfo e passa il modello abc come parametro della stringa di query. Il Web browser dovrebbe visualizzare i dati fittizi generati dalla funzione.

    Screenshot di un Web browser in cui viene attivata la funzione di Azure WatchInfo. La funzione restituisce i dati fittizi per il modello specificato nella stringa di query dell'URL fornito.

  3. Immettere l'URL http://localhost:7071/api/WatchInfo. Questa richiesta non include una stringa di query. Il trigger restituisce la risposta di errore e il Web browser visualizza il messaggio Please provide a watch model in the query string.

  4. Chiudere il Web browser, ma lasciare in esecuzione l'app per le funzioni di Azure.

  5. In Visual Studio impostare un punto di interruzione nella riga di codice che recupera il modello dalla stringa di query.

    Screenshot di Visual Studio che mostra un punto di interruzione nell'istruzione che legge il modello dalla stringa di query.

  6. Riavviare il Web browser e immettere l'URL senza la stringa di query, http://localhost:7071/api/WatchInfo.

    Visual Studio evidenzia il codice nel punto di interruzione in cui viene sospesa l'esecuzione.

  7. In Visual Studio premere F10 per eseguire l'istruzione nel punto di interruzione.

  8. Nella scheda Auto della finestra Debugger verificare che la variabile model sia null. La variabile mostra questo valore perché la stringa di query non contiene un parametro del modello.

    Screenshot del debugger di Visual Studio che mostra il valore della variabile del modello.

  9. Premere di nuovo F10 e verificare che il controllo passi all'istruzione che restituisce un oggetto BadRequestObjectResult.

  10. Per continuare l'esecuzione del metodo e tornare al Web browser, premere F5. Verrà visualizzato lo stesso messaggio di errore.

  11. Nel Web browser immettere l'URL con una stringa di query e un parametro del modello. Eseguire la funzione di Azure nel debugger un'istruzione alla volta e verificare che il modello venga recuperato correttamente. La variabile model deve essere popolata con il valore del parametro e i dati del modello devono essere restituiti come oggetto OkObjectResult.

  12. Nella barra dei menu selezionare Debug>Arresta debug.

In questo esercizio è stato illustrato come l'estensione degli strumenti per Funzioni di Azure in Visual Studio semplifichi l'esperienza di creazione di un'app per le funzioni di Azure e consenta di usare strumenti familiari per compilare il codice ed eseguirne il debug.