Sdílet prostřednictvím


Vývoj Azure Functions pomocí sady Visual Studio

Visual Studio umožňuje vyvíjet, testovat a nasazovat funkce knihovny tříd C# do Azure. Pokud je toto prostředí s Azure Functions vaše první, prohlédněte si přehled Azure Functions.

Pokud chcete začít hned, zvažte dokončení rychlého startu Functions pro Visual Studio.

Tento článek obsahuje podrobnosti o tom, jak pomocí sady Visual Studio vyvíjet funkce knihovny tříd jazyka C# a publikovat je do Azure. Existují dva modely pro vývoj funkcí knihovny tříd jazyka C#: model izolovaného pracovníka a model v rámci procesu.

Čtete verzi tohoto článku o modelu izolovaného pracovníka. Upřednostňovaný model si můžete vybrat v horní části článku.

Čtete nedokončenou verzi modelu v tomto článku. Upřednostňovaný model si můžete vybrat v horní části článku.

Pokud není uvedeno jinak, jsou uvedené postupy a příklady pro Visual Studio 2022. Další informace o vydaných verzích sady Visual Studio 2022 najdete v poznámkách k verzi nebo poznámkách k verzi Preview.

Požadavky

  • Visual Studio 2022, včetně úlohy vývoje pro Azure

  • Během procesu publikování se ve vašem předplatném vytvoří další prostředky, které potřebujete, například účet Azure Storage.

  • Pokud nemáte účet Azure, vytvořte si bezplatný účet před tím, než začnete.

Vytvoření projektu služby Azure Functions

Šablona projektu Azure Functions v sadě Visual Studio vytvoří projekt knihovny tříd jazyka C#, který můžete publikovat do aplikace funkcí v Azure. Aplikaci funkcí můžete použít k seskupení funkcí jako logické jednotky pro snadnější správu, nasazení, škálování a sdílení prostředků.

  1. V nabídce sady Visual Studio vyberte Soubor>>

  2. V části Vytvořit nový projekt zadejte do vyhledávacího pole funkce , zvolte šablonu Azure Functions a pak vyberte Další.

  3. V části Konfigurace nového projektu zadejte název projektu a pak vyberte Vytvořit. Název aplikace funkcí musí být platný jako obor názvů C#, takže nepoužívejte podtržítka, pomlčky nebo jiné nealfanumerické znaky.

  4. Pro vytvoření nového nastavení aplikace Azure Functions použijte hodnoty v následující tabulce:

    Nastavení Hodnota Popis
    Verze .NET Izolovaná platforma .NET 8 Tato hodnota vytvoří projekt funkce, který běží v izolovaném pracovním procesu. Izolovaný pracovní proces podporuje jinou verzi .NET než LTS a také rozhraní .NET Framework. Další informace najdete v přehledu verzí modulu runtime Azure Functions.
    Šablona funkce Spouštěč HTTP Tato hodnota vytvoří funkci aktivovanou požadavkem HTTP.
    Účet úložiště (AzureWebJobsStorage) Emulátor úložiště Vzhledem k tomu, že funkční aplikace v Azure vyžaduje účet úložiště, jeden je přiřazen nebo vytvořen při publikování projektu do Azure. HTTP spouštěč nepoužívá připojovací řetězec účtu Azure Storage; všechny ostatní typy spouštěčů vyžadují platný připojovací řetězec účtu Azure Storage.
    Úroveň autorizace Anonymní Vytvořenou funkci může aktivovat libovolný klient bez zadání klíče. Toto nastavení autorizace usnadňuje testování nových funkcí. Další informace najdete v tématu Úroveň autorizace.

    Snímek obrazovky s nastavením projektu Azure Functions pro izolovaný model pracovního procesu

    Nastavení Hodnota Popis
    Verze .NET .NET 8 Tato hodnota vytvoří projekt funkce, který běží v procesu s modulem runtime Azure Functions verze 4.x. Další informace najdete v přehledu verzí modulu runtime Azure Functions.
    Šablona funkce Spouštěč HTTP Tato hodnota vytvoří funkci aktivovanou požadavkem HTTP.
    Účet úložiště (AzureWebJobsStorage) Emulátor úložiště Vzhledem k tomu, že funkční aplikace v Azure vyžaduje účet úložiště, jeden je přiřazen nebo vytvořen při publikování projektu do Azure. HTTP spouštěč nepoužívá připojovací řetězec účtu Azure Storage; všechny ostatní typy spouštěčů vyžadují platný připojovací řetězec účtu Azure Storage.
    Úroveň autorizace Anonymní Vytvořenou funkci může aktivovat libovolný klient bez zadání klíče. Toto nastavení autorizace usnadňuje testování nových funkcí. Další informace najdete v tématu Úroveň autorizace.

    Snímek obrazovky s nastavením projektu Azure Functions pro model v procesu

    Ujistěte se, že jste nastavili úroveň autorizace na anonymní. Pokud zvolíte výchozí úroveň funkce, budete muset předložit klíč funkce v požadavcích pro přístup ke koncovému bodu funkce.

  5. Výběrem možnosti Vytvořit vytvořte projekt funkce a funkci triggeru HTTP.

Po vytvoření projektu Azure Functions vytvoří šablona projektu projekt v jazyce C#, nainstaluje Microsoft.Azure.Functions.Worker balíčky NuGet a Microsoft.Azure.Functions.Worker.Sdk nastaví cílovou architekturu.

Po vytvoření projektu Azure Functions vytvoří šablona projektu projekt v jazyce C#, nainstaluje Microsoft.NET.Sdk.Functions balíček NuGet a nastaví cílovou architekturu.

Nový projekt obsahuje následující soubory:

  • host.json: Umožňuje nakonfigurovat hostitele služby Functions. Tato nastavení platí jak při místním spuštění, tak v Azure. Další informace najdete v host.json referenčních informacích.

  • local.settings.json: Udržuje nastavení používaná při místním spouštění funkcí. Tato nastavení se při spuštění v Azure nepoužívají. Další informace naleznete v tématu Místní soubor nastavení.

    Důležité

    Protože souborlocal.settings.json může obsahovat tajné kódy, musíte ho vyloučit ze správy zdrojového kódu projektu. Ujistěte se, že nastavení Kopírovat do výstupního adresáře pro tento soubor je nastaveno na kopírovat, pokud je novější.

Další informace naleznete v tématu Struktura projektu v příručce o izolovaných pracovnících.

Další informace naleznete v Projektu knihovny tříd Functions.

Práce s místním nastavením aplikace

Při spuštění v aplikaci funkcí v Azure se nastavení vyžadovaná funkcemi bezpečně ukládají v nastavení aplikace. Během místního vývoje se tato nastavení místo toho přidají do Values kolekce v souborulocal.settings.json . Soubor local.settings.json také ukládá nastavení používaná místními vývojářskými nástroji.

Položky v kolekci Values v souboru local.settings.json projektu mají zrcadlit položky v nastavení aplikace funkcí v Azure.

Visual Studio při publikování projektu automaticky nenahraje nastavení v local.settings.json . Abyste měli jistotu, že tato nastavení existují i ve vaší aplikaci funkcí v Azure, nahrajte je po publikování projektu. Další informace najdete v tématu Nastavení aplikace funkcí. Hodnoty v ConnectionStrings kolekci se nikdy nepublikují.

Kód může také číst hodnoty nastavení aplikace funkcí jako proměnné prostředí. Další informace naleznete v tématu Proměnné prostředí.

Konfigurace projektu pro místní vývoj

Modul runtime Služby Functions interně používá účet služby Azure Storage. Pro všechny typy triggerů kromě HTTP a webhooků nastavte u klíče Values.AzureWebJobsStorage platný připojovací řetězec účtu služby Azure Storage. Aplikace funkcí může také použít emulátor Azurite pro AzureWebJobsStorage nastavení připojení vyžadované projektem. Chcete-li použít emulátor, nastavte hodnotu AzureWebJobsStorage na UseDevelopmentStorage=true. Před nasazením nastavte toto na připojovací řetězec skutečného účtu úložiště. Další informace naleznete v tématu Emulátor místního úložiště.

Chcete-li nastavit připojovací řetězec k účtu úložiště:

  1. Na webu Azure Portal přejděte ke svému účtu úložiště.

  2. Na kartě Přístupové klíče pod zabezpečením a sítí zkopírujte připojovací řetězecklíče 1.

  3. V projektu otevřete soubor local.settings.json a nastavte hodnotu AzureWebJobsStorage klíče na připojovací řetězec, který jste zkopírovali.

  4. Opakujte předchozí krok a přidejte do Values pole jedinečné klíče pro všechna další připojení, která vaše funkce vyžadují.

Přidání funkce do projektu

Ve funkcích knihovny tříd jazyka C# jsou vazby používané funkcí definovány použitím atributů v kódu. Když vytvoříte triggery funkce z poskytnutých šablon, použijí se pro vás atributy triggeru.

  1. V Průzkumník řešení klikněte pravým tlačítkem na uzel projektu a vyberte >.

  2. Zadejte název třídy a pak vyberte Přidat.

  3. Zvolte aktivační událost, nastavte požadované vlastnosti vazby a pak vyberte Přidat. Následující příklad ukazuje nastavení pro vytvoření funkce triggeru Queue Storage.

    Snímek obrazovky znázorňující nastavení pro vytvoření funkce triggeru služby Queue Storage

    V případě triggeru služby Azure Storage zaškrtněte políčko Konfigurovat připojení a zobrazí se výzva k výběru mezi použitím emulátoru úložiště Azurite nebo odkazováním na zřízený účet úložiště Azure. Vyberte Další a pokud zvolíte účet úložiště, Visual Studio se pokusí připojit k vašemu účtu Azure a získat připojovací řetězec. Zvolte Uložit hodnotu řetězce připojení v souboru Tajné údaje místního uživatele a poté klikněte na Dokončit pro vytvoření třídy triggeru.

    Tento příklad triggeru používá nastavení aplikace pro připojení k úložišti s klíčem s názvem QueueStorage. Tento klíč uložený v souboru local.settings.json odkazuje buď na emulátor Azurite, nebo na účet úložiště Azure.

  4. Prozkoumejte nově přidanou třídu. Například následující třída jazyka C# představuje základní funkci triggeru Queue Storage:

    Zobrazí se statická Run() metoda s atributem Function. Tento atribut označuje, že metoda je vstupním bodem funkce.

    using System;
    using Azure.Storage.Queues.Models;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function;
    
    public class QueueTriggerCSharp
    {
        private readonly ILogger<QueueTriggerCSharp> _logger;
    
        public QueueTriggerCSharp(ILogger<QueueTriggerCSharp> logger)
        {
            _logger = logger;
        }
    
        [Function(nameof(QueueTriggerCSharp))]
        public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")] QueueMessage message)
        {
            _logger.LogInformation("C# Queue trigger function processed: {messageText}", message.MessageText);
        }
    }
    

    Zobrazí se statická Run() metoda s atributem FunctionName. Tento atribut označuje, že metoda je vstupním bodem funkce.

    using System;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function
    {
        public class QueueTriggerCSharp
        {
            [FunctionName("QueueTriggerCSharp")]
            public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")]string myQueueItem, ILogger log)
            {
                log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            }
        }
    }
    

U každého parametru vazby zadaného do metody vstupního bodu se použije atribut specifický pro vazbu. Atribut přebírá informace o vazbě jako parametry. V předchozím příkladu má QueueTrigger první parametr použitý atribut označující funkci triggeru queue storage. Název fronty a název nastavení připojovacího řetězce se předají jako parametry atributuQueueTrigger. Další informace najdete v tématu Vazby na Azure Queue Storage pro Azure Functions.

Pomocí předchozího postupu můžete do projektu aplikace funkcí přidat další funkce. Každá funkce v projektu může mít jinou aktivační událost, ale funkce musí mít přesně jednu aktivační událost. Další informace najdete v tématu o koncepcích triggerů a vazeb Azure Functions.

Přidejte vazby

Stejně jako u triggerů se vstupní a výstupní vazby přidávají do vaší funkce jako atributy vazeb. Přidejte do funkce propojení následujícím způsobem:

  1. Ujistěte se, že jste projekt nakonfigurovali pro místní vývoj.

  2. Přidejte odpovídající balíček rozšíření NuGet pro konkrétní vazbu vyhledáním požadavků balíčku NuGet specifických pro vazbu v referenčním článku pro vazbu. Požadavky na balíček pro trigger služby Event Hubs najdete například v článku s referenčními informacemi o vazbách služby Event Hubs.

  3. Pomocí následujícího příkazu v konzole Správce balíčků nainstalujte konkrétní balíček:

    Install-Package Microsoft.Azure.Functions.Worker.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    
    Install-Package Microsoft.Azure.WebJobs.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    

    V tomto příkladu nahraďte <BINDING_TYPE> názvem specifickým pro rozšíření vazby a <TARGET_VERSION> konkrétní verzí balíčku, například 4.0.0. Platné verze jsou uvedeny na jednotlivých stránkách balíčku na NuGet.org.

  4. Pokud existují nastavení aplikace, která vazba potřebuje, přidejte je do Values kolekce v místním souboru nastavení.

    Funkce používá tyto hodnoty při místním spuštění. Když se funkce spustí v aplikaci funkcí v Azure, použije nastavení aplikace funkcí. Visual Studio usnadňuje publikování místních nastavení do Azure.

  5. Přidejte do podpisu metody příslušný atribut vazby. V následujícím příkladu je funkce spuštěna zprávou z fronty a výstupní vazba vytvoří novou zprávu do jiné fronty se stejným textem.

     public class QueueTrigger
    {
        private readonly ILogger _logger;
    
        public QueueTrigger(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<QueueTrigger>();
        }
    
        [Function("CopyQueueMessage")]
        [QueueOutput("myqueue-items-destination", Connection = "QueueStorage")]
        public string Run([QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem)
        {
            _logger.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            return myQueueItem;
        }
    }
    

    Atribut QueueOutput definuje vazbu metody. U více výstupních vazeb byste místo toho tento atribut umístili na řetězcovou vlastnost vráceného objektu. Další informace naleznete v tématu Více výstupních vazeb.

    public static class SimpleExampleWithOutput
    {
        [FunctionName("CopyQueueMessage")]
        public static void Run(
            [QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem, 
            [Queue("myqueue-items-destination", Connection = "QueueStorage")] out string myQueueItemCopy,
            ILogger log)
        {
            log.LogInformation($"CopyQueueMessage function processed: {myQueueItem}");
            myQueueItemCopy = myQueueItem;
        }
    }
    

    Atribut Queue parametru out definuje výstupní vazbu.

    Připojení ke službě QueueStorage Queue Storage se získá z nastavení. Další informace najdete v referenčním článku pro konkrétní vazbu.

Úplný seznam vazeb podporovaných funkcí najdete v tématu Podporované vazby. Podrobnější příklad tohoto scénáře najdete v tématu Připojení funkcí ke službě Azure Storage pomocí sady Visual Studio.

Místní spouštění funkcí

Nástroje Azure Functions Core umožňují spouštět projekt Azure Functions na místním počítači pro vývoj. Když stisknete klávesu F5 pro ladění projektu functions, místní hostitel služby Functions (func.exe) začne naslouchat na místním portu (obvykle 7071). Všechny koncové body volatelné funkce se zapisují do výstupu a tyto koncové body můžete použít k testování funkcí. Další informace najdete v tématu Místní vývoj azure Functions pomocí nástrojů Core Tools. Při prvním spuštění funkce ze sady Visual Studio se zobrazí výzva k instalaci těchto nástrojů.

Důležité

Od verze 4.0.6517 nástrojů Core Tools musí projekty modelu v procesu odkazovat na verzi 4.5.0 nebo novější .Microsoft.NET.Sdk.Functions Pokud použijete starší verzi, dojde k chybě příkazu func start.

Chcete-li spustit svou funkci v sadě Visual Studio v režimu ladění:

  1. Stiskněte klávesu F5. Po výzvě přijměte požadavek Visual Studio na stažení a instalaci nástrojů Azure Functions Core Tools (CLI). Možná budete muset také povolit výjimku brány firewall, aby nástroje mohly zpracovávat požadavky HTTP.

  2. Když je projekt spuštěný, otestujte kód stejně jako nasazenou funkci.

    Při spuštění Visual Studio v režimu ladění se body přerušení zobrazí podle očekávání.

Podrobnější scénář testování pomocí sady Visual Studio najdete v tématu Testování funkcí.

Publikování do Azure

Když publikujete svůj projekt funkcí do Azure, Visual Studio použije k nasazení souborů projektu nasazení pomocí zipu. Pokud je to možné, měli byste také vybrat spustit z balíčku , aby se projekt spustil v balíčku nasazení (.zip). Další informace najdete v tématu Spuštění funkcí ze souboru balíčku v Azure.

Neprovádějte nasazení do Azure Functions pomocí Web Deploy (msdeploy).

Pomocí následujících kroků publikujte projekt do aplikace funkcí v Azure.

  1. V Průzkumníku řešení klikněte pravým tlačítkem na požadovaný projekt a vyberte Publikovat. V položce Target vyberte Azure a poté vyberte Další.

  2. V konkrétním cíli vyberte Aplikaci funkcí Azure (Linux) a pak vyberte Další.

    Plán Flex Consumption vyžaduje Linux.

  3. V instanci služby Functions vyberte Vytvořit nový.

    Snímek obrazovky znázorňující vytvoření nové instance aplikace funkcí

  4. Vytvořte novou instanci pomocí hodnot zadaných v následující tabulce:

    Nastavení Hodnota Popis
    Jméno Globálně jedinečný název Název jednoznačně identifikující novou aplikaci funkcí. Přijměte tento název nebo zadejte nový název. Platné znaky jsou: a-z, 0-9a -.
    Název předplatného Název předplatného Předplatné Azure, které se má použít. Přijměte toto předplatné nebo v rozevíracím seznamu vyberte nové.
    Skupina prostředků Název vaší skupiny prostředků Skupina prostředků, ve které chcete vytvořit funkční aplikaci. Výběrem možnosti Nový vytvořte novou skupinu prostředků. Můžete také použít existující skupinu prostředků z rozevíracího seznamu.
    Typ plánu Flex Spotřeba Když projekt publikujete do aplikace funkcí, která běží v plánu Flex Consumption, můžete platit jenom za provádění aplikace funkcí. Jiné plány hostování můžou mít vyšší náklady.
    Místo Umístění služby App Service Vyberte umístění v oblasti Azure podporované plánem Flex Consumption.
    Velikost paměti instance 2048 Velikost paměti instancí virtuálních počítačů, ve kterých se aplikace spouští, je jedinečná pro plán Flex Consumption.
    Azure Storage Účet úložiště pro obecné účely Modul runtime Functions vyžaduje účet úložiště Azure. Výběrem možnosti Nový nakonfigurujte účet úložiště pro obecné účely. Můžete také použít existující účet, který splňuje požadavky na účet úložiště.
    Application Insights Instance služby Application Insights Měli byste povolit integraci Azure Application Insights pro vaši funkční aplikaci. Vyberte Nový a vytvořte novou instanci, a to buď v novém, nebo v existujícím pracovním prostoru služby Log Analytics. Můžete se také rozhodnout použít existující instanci.

    Snímek obrazovky s dialogovým oknem Vytvořit službu App Service

  5. Výběrem možnosti Vytvořit vytvoříte aplikaci funkcí a související prostředky v Azure. Stav vytváření prostředků se zobrazí v levém dolním rohu okna.

  6. Vyberte Dokončit a potom na kartě Publikovat vyberte Publikovat a nasaďte balíček, který obsahuje soubory projektu do nové aplikace funkcí v Azure.

    Po dokončení nasazení se na kartě Publikovat zobrazí kořenová adresa URL aplikace funkcí v Azure.

  7. Na kartě Publikovat v části Hostování vyberte Otevřít na webu Azure Portal. Nový prostředek aplikace funkcí Azure se otevře na webu Azure Portal.

    Snímek obrazovky se zprávou o úspěšném publikování

Nastavení aplikace Function App

Visual Studio tato nastavení automaticky nenahraje při publikování projektu. Všechna nastavení, která přidáte do local.settings.json musíte také přidat do aplikace funkcí v Azure.

Nejjednodušší způsob, jak nahrát požadovaná nastavení do aplikace funkcí v Azure, je rozbalit tři tečky vedle oddílu Hostování a vybrat odkaz Spravovat nastavení služby Aplikace Azure, který se zobrazí po úspěšném publikování projektu.

Snímek obrazovky znázorňující nastavení v okně Publikovat

Když vyberete tento odkaz, zobrazí se dialogové okno Nastavení aplikace pro aplikaci funkcí, kde můžete přidat nová nastavení aplikace nebo upravit existující.

Snímek obrazovky znázorňující nastavení aplikace

Místní zobrazí hodnotu nastavení v souboru local.settings.json a Remote zobrazí aktuální hodnotu nastavení v aplikaci funkcí v Azure. Zvolte Přidat nastavení a vytvořte nové nastavení aplikace. Pomocí možnosti Vložit hodnotu z místního odkazu zkopírujte hodnotu nastavení do pole Vzdálené. Čekající změny se zapíšou do místního souboru nastavení a aplikace funkcí, když vyberete OK.

Poznámka:

Ve výchozím nastavení není soubor local.settings.json zařazený do správy verzí. To znamená, že pokud klonujete místní projekt Functions ze správy zdrojového kódu, projekt nemá local.settings.json soubor. V takovém případě potřebujete ručně vytvořit soubor local.settings.json v kořenovém adresáři projektu, aby dialogové okno Nastavení aplikace fungovalo podle očekávání.

Nastavení aplikace můžete spravovat také jedním z těchto způsobů:

Vzdálené debugování

Pokud chcete svou funkční aplikaci vzdáleně ladit, musíte publikovat ladicí konfiguraci svého projektu. Také je potřeba povolit vzdálené ladění v aplikaci funkcí v Azure.

V této části se předpokládá, že jste už v aplikaci funkcí publikovali pomocí konfigurace vydané verze.

Důležité informace o vzdáleném ladění

  • Nedoporučuje se provádět vzdálené ladění na produkčním serveru.
  • Pokud máte povolené ladění Just My Code, zakažte ho.
  • Vyhýbejte se dlouhému zastavení na bodech přerušení při vzdáleném ladění. Azure zpracovává proces, který je zastavený déle než několik minut, jako nereagující proces a vypne ho.
  • Během ladění server odesílá data do sady Visual Studio, což by mohlo mít vliv na poplatky za šířku pásma. Informace o sazbách šířky pásma najdete v cenové kalkulačce.
  • Vzdálené ladění se ve vaší aplikaci funkcí po 48 hodinách automaticky zakáže. Po 48 hodinách budete muset znovu povolit vzdálené ladění.

Připojte ladicí program

Jak připojíte ladicí program, závisí na vašem režimu spuštění. Při ladění aplikace izolovaného pracovního procesu je aktuálně potřeba připojit vzdálený ladicí program k samostatnému procesu .NET a vyžaduje se několik dalších kroků konfigurace.

Až budete hotovi, měli byste vzdálené ladění zakázat.

Připojení vzdáleného ladicího programu k funkční aplikaci běžící v samostatném procesu od hostitele Functions:

  1. Na kartě Publikovat vyberte tři tečky (...) v sekci Hosting a pak zvolte Stáhnout profil publikování. Tato akce stáhne kopii profilu publikování a otevře umístění pro stažení. Tento soubor, který obsahuje přihlašovací údaje použité k připojení k izolovanému pracovnímu procesu spuštěného v Azure, potřebujete.

    Upozornění

    Soubor .publishsettings obsahuje vaše přihlašovací údaje (nekódované), které se používají ke správě vaší aplikace funkcí. Osvědčeným postupem zabezpečení pro tento soubor je dočasné uložení mimo zdrojové adresáře (například ve složce Knihovny\Dokumenty) a jeho odstranění po tom, co už ho nepotřebujete. Uživatel se zlými úmysly, který získá přístup k souboru .publishsettings , může upravovat, vytvářet a odstraňovat vaši aplikaci funkcí.

  2. Znovu na kartě Publikovat zvolte trojtečku (...) v sekci Hostování a poté zvolte Připojit ladicí program.

    Visual Studio se připojí k aplikaci funkcí a povolí vzdálené ladění, pokud ještě není povolené.

    Poznámka:

    Vzhledem k tomu, že vzdálený ladicí program se nemůže připojit k hostitelskému procesu, může se zobrazit chyba. V každém případě výchozí ladění nevstupuje do vašeho kódu.

  3. Vraťte se do Visual Studio a zkopírujte adresu URL pro web v sekci Hostování na stránce Publikovat.

  4. V nabídce Ladění vyberte Připojit k procesu a v okně Připojit k procesu vložte adresu URL do cíle připojení, odeberte https:// a připojte port :4024.

    Ověřte, že cíl vypadá nějak takto <FUNCTION_APP>.azurewebsites.net:4024 , a stiskněte Enter.

    Snímek obrazovky s dialogovým oknem „Připojit k procesu“.

  5. Pokud se zobrazí výzva, povolte sadě Visual Studio přístup přes místní bránu firewall.

  6. Po zobrazení výzvy k zadání přihlašovacích údajů zvolte místo přihlašovacích údajů místního uživatele jiný účet (další možnosti ve Windows). Zadejte hodnoty userName a userPWD z publikovaného profilu pro e-mailovou adresu a heslo v dialogovém okně ověřování ve Windows. Po navázání zabezpečeného připojení se serverem nasazení se zobrazí dostupné procesy.

    Snímek obrazovky s dialogovým oknem pro zadání přihlašovacích údajů

  7. Zaškrtněte políčko Zobrazit proces od všech uživatelů a pak zvolte dotnet.exe a vyberte Připojit. Po dokončení operace budete připojeni k kódu knihovny tříd jazyka C#, který běží v izolovaném pracovním procesu. V tomto okamžiku můžete svou funkční aplikaci ladit obvyklým způsobem.

Připojení vzdáleného ladicího programu k funkční aplikaci spuštěné v procesu použitím hosta Služby Functions:

  • Na kartě Publikovat vyberte výpustku (...) v části Hostování a pak zvolte Připojit ladicí program.

Visual Studio se připojí k aplikaci funkcí a povolí vzdálené ladění, pokud ještě není povolené. Také lokalizuje a připojuje debugger k hostitelskému procesu aplikace. V tomto okamžiku můžete svou funkční aplikaci ladit obvyklým způsobem.

Zakázat vzdálené ladění

Po vzdáleném ladění kódu byste měli na webu Azure Portal zakázat vzdálené ladění. Vzdálené ladění se po 48 hodinách automaticky zakáže, pokud zapomenete.

  1. Na kartě Publikovat v projektu vyberte tři tečky (...) v části Hostování a zvolte Otevřít na webu Azure Portal. Tato akce otevře aplikaci funkcí na webu Azure Portal, do které je projekt nasazený.

  2. V aplikaci funkcí vyberte v části Nastavení možnost Konfigurace, zvolte Obecné nastavení, nastavte vzdálené ladění na Vypnuto a pak vyberte Uložit a Pokračovat.

Po restartování aplikace funkcí se už nemůžete vzdáleně připojit ke vzdáleným procesům. Stejnou kartu můžete použít v Azure portálu k povolení vzdáleného ladění externě mimo Visual Studio.

Monitorovací funkce

Doporučeným způsobem, jak monitorovat provádění vašich funkcí, je integrace vaší funkční aplikace s Azure Application Insights. Tuto integraci byste měli povolit při vytváření aplikace funkcí během publikování sady Visual Studio.

Pokud se integrace z nějakého důvodu během publikování nedokončila, měli byste i nadále povolit integraci Application Insights pro vaši aplikaci funkcí v Azure.

Další informace o monitorování pomocí Application Insights viz v tématu Monitorování Azure Functions.

Testování funkcí

Tato část popisuje, jak vytvořit projekt modelu v procesu jazyka C#, který můžete testovat pomocí xUnit, což je opensourcový nástroj pro testování jednotek pro .NET.

Krok 1: Nastavení

Podle těchto kroků nakonfigurujte prostředí, včetně projektu a funkcí aplikace, které jsou potřeba pro podporu testů:

  1. Vytvořte novou aplikaci Functions a pojmenujte ji Functions
  2. Vytvořte z šablony funkci HTTP a pojmenujte ji MyHttpTrigger.
  3. Vytvořte funkci časovače ze šablony a pojmenujte ji MyTimerTrigger.
  4. V řešení vytvořte aplikaci xUnit Test a pojmenujte ji Functions.Tests. Odeberte výchozí testovací soubory.
  5. Přidání odkazu z testovací aplikace do Microsoft.AspNetCore.Mvc pomocí NuGetu
  6. Odkaz na aplikaci Functions z aplikace Functions.Tests

Teď, když jsou projekty vytvořeny, můžete vytvořit třídy použité ke spuštění automatizovaných testů.

Krok 2: Vytvoření testovacích tříd

Každá funkce přebírá instanci ILogger k zpracování protokolování zpráv. Některé testy buď neprovedou protokolování zpráv, nebo se netýkají způsobu implementace protokolování. Ostatní testy musí vyhodnotit zprávy protokolované, aby bylo možné určit, jestli test prochází.

  1. Vytvořte třídu s názvem ListLogger, která obsahuje interní seznam zpráv, které se mají vyhodnotit během testování. K implementaci požadovaného rozhraní ILogger potřebuje třída rozsah. Následující třída napodobuje obor pro předání testovacích případů do třídy ListLogger.

  2. Vytvořte novou třídu v projektu Functions.Tests s názvem NullScope.cs a přidejte tento kód:

    using System;
    
    namespace Functions.Tests
    {
        public class NullScope : IDisposable
        {
            public static NullScope Instance { get; } = new NullScope();
    
            private NullScope() { }
    
            public void Dispose() { }
        }
    }
    
  3. Vytvořte třídu v projektu Functions.Tests s názvem ListLogger.cs a přidejte tento kód:

    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Functions.Tests
    {
        public class ListLogger : ILogger
        {
            public IList<string> Logs;
    
            public IDisposable BeginScope<TState>(TState state) => NullScope.Instance;
    
            public bool IsEnabled(LogLevel logLevel) => false;
    
            public ListLogger()
            {
                this.Logs = new List<string>();
            }
    
            public void Log<TState>(LogLevel logLevel,
                                    EventId eventId,
                                    TState state,
                                    Exception exception,
                                    Func<TState, Exception, string> formatter)
            {
                string message = formatter(state, exception);
                this.Logs.Add(message);
            }
        }
    }
    

    Třída ListLogger implementuje následující členy, jak je stanoveno rozhraním ILogger.

    • BeginScope: Obory přidávají do protokolování kontext. V tomto případě test pouze odkazuje na statickou instanci třídy NullScope , aby test mohl fungovat.

    • IsEnabled: Je k dispozici výchozí hodnota false .

    • Log: Tato metoda používá zadanou formatter funkci k formátování zprávy a pak přidá výsledný text do Logs kolekce.

    Kolekce Logs je instance List<string> a je inicializována v konstruktoru.

  4. Vytvořte soubor kódu v projektu Functions.Tests s názvem LoggerTypes.cs a přidejte tento kód:

    namespace Functions.Tests
    {
        public enum LoggerTypes
        {
            Null,
            List
        }
    }
    

    Tento výčet určuje typ protokolovacího nástroje používaného testy.

  5. Vytvořte třídu v projektu Functions.Tests s názvem TestFactory.cs a přidejte tento kód:

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Http.Internal;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Logging.Abstractions;
    using Microsoft.Extensions.Primitives;
    using System.Collections.Generic;
    
    namespace Functions.Tests
    {
        public class TestFactory
        {
            public static IEnumerable<object[]> Data()
            {
                return new List<object[]>
                {
                    new object[] { "name", "Bill" },
                    new object[] { "name", "Paul" },
                    new object[] { "name", "Steve" }
    
                };
            }
    
            private static Dictionary<string, StringValues> CreateDictionary(string key, string value)
            {
                var qs = new Dictionary<string, StringValues>
                {
                    { key, value }
                };
                return qs;
            }
    
            public static HttpRequest CreateHttpRequest(string queryStringKey, string queryStringValue)
            {
                var context = new DefaultHttpContext();
                var request = context.Request;
                request.Query = new QueryCollection(CreateDictionary(queryStringKey, queryStringValue));
                return request;
            }
    
            public static ILogger CreateLogger(LoggerTypes type = LoggerTypes.Null)
            {
                ILogger logger;
    
                if (type == LoggerTypes.List)
                {
                    logger = new ListLogger();
                }
                else
                {
                    logger = NullLoggerFactory.Instance.CreateLogger("Null Logger");
                }
    
                return logger;
            }
        }
    }
    

    Třída TestFactory implementuje následující členy:

    • Data: Tato vlastnost vrátí IEnumerable kolekci ukázkových dat. Páry klíč-hodnota představují hodnoty, které jsou předány do řetězce dotazu.

    • CreateDictionary: Tato metoda přijímá dvojici klíč/hodnota jako argumenty a vrací nové Dictionary, které se používá k vytvoření QueryCollection pro reprezentaci hodnot řetězce dotazu.

    • CreateHttpRequest: Tato metoda vytvoří požadavek HTTP inicializovaný s danými parametry řetězce dotazu.

    • CreateLogger: Na základě typu protokolovacího nástroje vrátí tato metoda třídu loggeru použitou k testování. Systém ListLogger sleduje zaznamenané zprávy, které jsou k dispozici pro vyhodnocení v testech.

  6. Vytvořte třídu v projektu Functions.Tests s názvem FunctionsTests.cs a přidejte tento kód:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    using Xunit;
    
    namespace Functions.Tests
    {
        public class FunctionsTests
        {
            private readonly ILogger logger = TestFactory.CreateLogger();
    
            [Fact]
            public async void Http_trigger_should_return_known_string()
            {
                var request = TestFactory.CreateHttpRequest("name", "Bill");
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal("Hello, Bill. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Theory]
            [MemberData(nameof(TestFactory.Data), MemberType = typeof(TestFactory))]
            public async void Http_trigger_should_return_known_string_from_member_data(string queryStringKey, string queryStringValue)
            {
                var request = TestFactory.CreateHttpRequest(queryStringKey, queryStringValue);
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal($"Hello, {queryStringValue}. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Fact]
            public void Timer_should_log_message()
            {
                var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
                new MyTimerTrigger().Run(null, logger);
                var msg = logger.Logs[0];
                Assert.Contains("C# Timer trigger function executed at", msg);
            }
        }
    }
    

    Členy implementované v této třídě jsou:

    • Http_trigger_should_return_known_string: Tento test vytvoří požadavek s hodnotami řetězce dotazu name=Bill k HTTP funkci a zkontroluje, že se vrátí očekávaná odpověď.

    • Http_trigger_should_return_string_from_member_data: Tento test používá atributy xUnit k poskytování ukázkových dat funkci HTTP.

    • Timer_should_log_message: Tento test vytvoří instanci ListLogger a předá ji funkci časovače. Po spuštění funkce se zkontroluje protokol, aby se ujistil, že je k dispozici očekávaná zpráva.

  7. Pokud chcete získat přístup k nastavení aplikace v testech, můžete do funkce vložitIConfiguration instanci s napodobenými hodnotami proměnných prostředí.

Krok 3: Spuštění testů

Testy spustíte tak, že přejdete do Průzkumníka testů a vyberete Spustit všechny testy v zobrazení.

Snímek obrazovky znázorňující testování azure Functions pomocí jazyka C# v sadě Visual Studio

Krok 4: Ladění testů

Pokud chcete ladit testy, nastavte pro test zarážku, přejděte do Průzkumníka testů a vyberte >.