Cvičení – vytvoření a otestování jednoduché funkce Azure Functions místně pomocí sady Visual Studio

Dokončeno

Visual Studio poskytuje vynikající prostředí pro vytváření a testování aplikace Funkcí Azure. Funkci Azure Functions můžete vyvíjet místně a ověřit, že funguje správně, než ji nasadíte do cloudu.

Ve scénáři online webových stránek luxusních hodinek existuje požadavek na funkci, která vrací podrobné informace o hodinkách, když je dáno číslo modelu hodinek. Data, která potřebujete vrátit, zahrnují: výrobce, typ krytu (plný, průhledný nebo vyrytý), kryt, styl číselníku, dokončení případu, počet šperků a tak dále.

V tomto cvičení implementujete a otestujete verzi této funkce místně pomocí sady Visual Studio.

Poznámka:

Než začnete s tímto cvičením, ujistěte se, že máte nainstalovanou sadu VS 2022, spolu s rozšířeními úloh Web &cloud ASP.NET a vývojem pro web a vývoj pro Azure.

Vytvoření aplikace Funkcí Azure

Vytvořte aplikaci Funkcí Azure pomocí šablony Azure Functions .

  1. Spusťte Instalační program pro Visual Studio a na úvodní stránce sady Visual Studio 2022 vyberte Upravit.

  2. Ujistěte se, že jsou vybrané a dostupné ASP.NET a vývoj pro web a vývoj pro Azure (pokud při stahování nevyberete možnost Instalovat), a pak vyberte Zavřít.

    Snímek obrazovky sady Visual Studio 2022 se zvýrazněnými úlohami asp dot net a vývojovými úlohami Azure

  3. Na úvodní stránce sady Visual Studio 2022 vyberte Spustit.

  4. V nabídce Začínáme vyberte Vytvořit nový projekt. Objeví se stránka Vytvořit nový projekt.

  5. Vyhledejte šablonu Azure Functions nebo se posuňte na šablonu a pak vyberte Další.

    Snímek obrazovky sady Visual Studio 2022 – Vytvoření nové stránky projektu se zvýrazněnou šablonou Azure Functions

  6. Objeví se stránka Konfigurovat nový projekt. Zadejte následující hodnoty.

    Pole Hodnota
    Název projektu WatchPortalFunction
    Místo Vyberte umístění pro uložení projektu tak, že přejdete do složky nebo vytvoříte složku na místním počítači.
    Název řešení Přijmout WatchPortalFunction (výchozí).
    Umístění řešení a projektu do stejného adresáře Nezaškrtnuto (NENÍ vybráno). Toto nastavení zajišťuje správnou strukturu složek pro tento modul.

    Snímek obrazovky se stránkou Konfigurace nového projektu se zvýrazněnou možností Vytvořit

  7. Vyberte Další.

  8. Zobrazí se stránka Další informace .

  9. Vyberte následující hodnoty.

    Pole Hodnota
    Dotnet version *.NET 6.0 (dlouhodobá podpora)
    Aktivační událost funkce Trigger HTTP
    Použití Azurite pro účet úložiště runtime (AzureWebJobsStorage) Kontroloval
    Povolení Dockeru Nezaškrtnuto
    Úroveň autorizace Anonymní

    Pokud se v oznámení sady Visual Studio zobrazí, že jsou aktualizace připravené, vyberte Aktualizovat.

  10. Vyberte Vytvořit.

    Snímek obrazovky znázorňující triggery Azure Functions se zvýrazněnou aktivační událostí HTTP

    Visual Studio vytvoří WatchPortalFunction projekt a zobrazí soubor Function1.cs zdrojového kódu aplikace Functions v okně editoru kódu. Soubor obsahuje kód pro třídu s názvem Function1.

    Jak je znázorněno v následujícím ukázkovém kódu, Function1 třída obsahuje často používaný kód ze šablony triggeru HTTP. Metoda Run je anotována atributem [FunctionName ("Function1")]. V předchozí lekci jsme zjistili, že často používané parametry pro metodu Run jsou HttpRequest objekt obsahující podrobnosti požadavku, který funkci aktivoval, a záznam protokolu trasování pro záznam informací o trasování.

    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");
            }
        }
    }
    

Vytvoření funkce Azure Functions WatchInfo

  1. V nabídce Zobrazit vyberte Průzkumník řešení. V okně Průzkumník řešení klikněte pravým tlačítkem na projekt WatchPortalFunction Azure Functions a v místní nabídce vyberte Přidat>novou funkci Azure Functions.

    Snímek obrazovky s oknem Průzkumník řešení Uživatel vybral možnost Přidat –> nová funkce Azure Functions.

  2. V okně Přidat novou položku – WatchPortalFunction zvolte Funkce Azure Functions. Do pole Název zadejte WatchInfo.cs a pak vyberte Přidat.

    Snímek obrazovky s oknem Přidat novou položku Vybere se šablona funkce Azure Functions a nová funkce se jmenuje WatchInfo.cs.

  3. V okně Nová funkce Azure Functions – WatchInfo zvolte Trigger HTTP. V rozevíracím seznamu Úroveň autorizace vyberte Anonymní a pak vyberte Přidat.

    Snímek obrazovky s oknem Nová funkce Azure Je vybrán trigger HTTP s anonymními přístupovými právy.

    Visual Studio vytvoří novou funkci a Run metoda se označí atributem [FunctionName("WatchInfo")] .

  4. V těle Run funkce odstraňte kód za řádkem log.LogInformation . Výsledek by měl vypadat takto.

    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. Do textu Run metody za log.LogInformation řádek vložte následující kód.

    // 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");
    

    Tento kód načte model parametr z řetězce dotazu v požadavku HTTP a vrátí podrobnosti pro tento model kukátků. V tomto ukázkovém kódu jsme vytvořili fiktivní watchinfo data, která se vrátí bez ohledu na hodnotu model. Funkce vrátí odpověď, která obsahuje tyto podrobnosti. Pokud požadavek HTTP neobsahuje řetězec dotazu, vrátí funkce chybovou zprávu. V reálném příkladu byste použili model hodnotu k vyhledání správné watchinfo hodnoty, která se má vrátit.

Místní otestování funkce Azure Functions

  1. Na panelu příkazů vyberte >Spustit ladění.

    Visual Studio sestaví aplikaci Azure Function App a spustí modul runtime Azure Functions. Otevře se okno Výstup pro zobrazení zpráv při spuštění modulu runtime. Jakmile je modul runtime připravený, zobrazí se seznam funkcí HTTP a adresy URL, které můžete použít k aktivaci jednotlivých funkcí.

    Snímek obrazovky s oknem modulu runtime Azure Functions Modul runtime spustí aplikaci Azure Function App a zobrazuje adresy URL pro Azure Functions Function1 a WatchInfo.

  2. Otevřete webový prohlížeč a zadejte adresu URL zobrazenou v okně modulu runtime. Výchozí adresa URL je http://localhost:7071/api/WatchInfo?model=abc, takže se jedná o adresu URL, kterou používáme v tomto cvičení. Požadavek aktivuje WatchInfo funkci a předá model abc jako parametr řetězce dotazu. Webový prohlížeč by měl zobrazit fiktivní podrobnosti vygenerované funkcí.

    Snímek obrazovky webového prohlížeče aktivujícího funkci Azure WatchInfo Funkce vrátí fiktivní podrobnosti o modelu zadaném v řetězci dotazu zadané adresy URL.

  3. Zadejte adresu URL http://localhost:7071/api/WatchInfo. Tento požadavek nezahrnuje řetězec dotazu. Trigger vrátí chybovou odpověď a webový prohlížeč zobrazí zprávu Please provide a watch model in the query string.

  4. Zavřete webový prohlížeč, ale nechte aplikaci Funkcí Azure spuštěnou.

  5. V sadě Visual Studio nastavte zarážku na řádku kódu, který načítá model z řetězce dotazu.

    Snímek obrazovky sady Visual Studio znázorňující zarážku v příkazu, který načte model z řetězce dotazu

  6. Restartujte webový prohlížeč a zadejte adresu URL bez řetězce http://localhost:7071/api/WatchInfodotazu .

    Visual Studio zvýrazní kód na zarážce, kde je pozastaveno provádění.

  7. V sadě Visual Studio přejděte k příkazu na zarážce stisknutím klávesy F10.

  8. Na kartě Automatické položky v okně ladicího programu ověřte, zda model je nullproměnná . Proměnná zobrazuje tuto hodnotu, protože řetězec dotazu neobsahuje parametr modelu.

    Snímek obrazovky ladicího programu sady Visual Studio zobrazující hodnotu proměnné modelu

  9. Znovu stiskněte klávesu F10 a ověřte, že ovládací prvek přejde na příkaz, který vrací BadRequestObjectResult objekt.

  10. Pokud chcete pokračovat ve spuštění metody a vrátit se do webového prohlížeče, stiskněte klávesu F5. Měla by se zobrazit stejná chybová zpráva.

  11. Ve webovém prohlížeči zadejte adresu URL s řetězcem dotazu a parametrem modelu. Projděte funkci v ladicím programu a ověřte, že je model načten správně. Proměnná model by měla být naplněná hodnotou parametru a podrobnosti modelu by se měly vrátit jako objekt OkObjectResult.

  12. Na řádku nabídek vyberte Ladění>zastavit ladění.

V tomto cvičení jste viděli, jak rozšíření Azure Functions Tools v sadě Visual Studio zjednodušuje vytváření aplikace funkcí Azure tím, že vám umožní používat známé nástroje k sestavení a ladění kódu.