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í, přečtěte si úvod ke službě 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ího procesu a model v procesu.

Tento článek čte verzi izolovaného pracovního modelu. Upřednostňovaný model si můžete vybrat v horní části článku.

Čtete verzi modelu v procesu 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 ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure 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>nový>projekt.

  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 6 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 Trigger HTTP Tato hodnota vytvoří funkci aktivovanou požadavkem HTTP.
    Účet úložiště (AzureWebJobsStorage) Emulátor úložiště Vzhledem k tomu, že aplikace funkcí v Azure vyžaduje účet úložiště, přiřadí se nebo vytvoří při publikování projektu do Azure. Trigger HTTP nepoužívá účet služby Azure Storage připojovací řetězec; všechny ostatní typy triggerů vyžadují platný účet služby Azure Storage připojovací řetězec.
    Ú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 o klíčích a autorizaci najdete v tématu Autorizační klíče a vazby HTTP a webhooku.

    Screenshot of Azure Functions project settings

    Nastavení Hodnota Popis
    Verze .NET .NET 6 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 Trigger HTTP Tato hodnota vytvoří funkci aktivovanou požadavkem HTTP.
    Účet úložiště (AzureWebJobsStorage) Emulátor úložiště Vzhledem k tomu, že aplikace funkcí v Azure vyžaduje účet úložiště, přiřadí se nebo vytvoří při publikování projektu do Azure. Trigger HTTP nepoužívá účet služby Azure Storage připojovací řetězec; všechny ostatní typy triggerů vyžadují platný účet služby Azure Storage připojovací řetězec.
    Ú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 o klíčích a autorizaci najdete v tématu Autorizační klíče a vazby HTTP a webhooku.

    Screenshot of Azure Functions project settings

    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 soubor local.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 izolovaném pracovním průvodci.

Další informace naleznete v tématu Projekt 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 souboru local.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 Values.AzureWebJobsStorage klíč na platný účet služby Azure Storage připojovací řetězec. 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=truehodnotu . Toto nastavení změňte na skutečný účet úložiště připojovací řetězec před nasazením. Další informace naleznete v tématu Emulátor místního úložiště.

Nastavení účtu úložiště připojovací řetězec:

  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 řetězecPřipojení ion klíče1.

  3. V projektu otevřete soubor local.settings.json a nastavte hodnotu AzureWebJobsStorage klíče na připojovací řetězec, kterou 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 Přidat>novou funkci Azure Functions.

  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.

    Create a Queue storage trigger function

    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. V souboru tajných kódů místního uživatele zvolte Uložit připojovací řetězec hodnotu a pak dokončete 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: {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í řetězec se předají jako parametry atributuQueueTrigger. Další informace najdete v tématu Vazby azure Queue Storage pro Azure Functions.

Pomocí výše uvedené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řidání vazeb

Stejně jako u triggerů se vstupní a výstupní vazby přidávají do vaší funkce jako atributy vazeb. Přidejte do funkce vazby 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 aktivuje funkce zpráva fronty a výstupní vazba vytvoří novou zprávu fronty se stejným textem v jiné frontě.

     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.

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 Práce s nástroji Azure Functions Core Tools. Při prvním spuštění funkce ze sady Visual Studio se zobrazí výzva k instalaci těchto nástrojů.

Spuštění funkce v sadě Visual Studio v režimu ladění:

  1. Stiskněte klávesu F5. Po výzvě přijměte požadavek ze sady Visual Studio na stažení a instalaci nástrojů Azure Functions Core (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í sady Visual Studio v režimu ladění se zarážky 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 projekt funkcí do Azure, Visual Studio k nasazení souborů projektu použije nasazení zip. 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.

Nenasazujte do Azure Functions pomocí nasazení webu (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 části Target (Cíl) vyberte Azure a pak Next (Další).

    Screenshot of publish window.

  2. Vyberte aplikaci Funkcí Azure (Windows) pro konkrétní cíl, která vytvoří aplikaci funkcí, která běží ve Windows, a pak vyberte Další.

    Screenshot of publish window with specific target.

  3. V instanci funkce zvolte Vytvořit novou funkci Azure...

    Screenshot of create a new function app instance.

  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 -.
    Předplatné Vaše předplatné 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 aplikaci funkcí. Výběrem možnosti Nový vytvořte novou skupinu prostředků. V rozevíracím seznamu můžete také zvolit existující skupinu prostředků.
    Typ plánu Využití Když projekt publikujete do aplikace funkcí, která běží v plánu Consumption, platíte jenom za provádění aplikace funkcí. Jiné plány hostování účtují vyšší náklady.
    Místo Umístění služby App Service Zvolte umístění v oblasti blízko vás nebo jiné služby, ke kterým vaše funkce přistupují.
    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é zvolit existující účet, který splňuje požadavky na účet úložiště.
    Application Insights Instance Přehledy aplikace Měli byste povolit integraci aplikačních Přehledy pro vaši aplikaci funkcí. 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 také zvolit existující instanci.

    Screenshot of Create App Service dialog.

  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. V instanci služby Functions se ujistěte, že je zaškrtnuté políčko Spustit ze souboru balíčku. Aplikace funkcí se nasadí pomocí příkazu Zip Deploy s povoleným režimem Spustit z balíčku . Zip Deploy je doporučená metoda nasazení pro váš projekt funkcí, která vede k lepšímu výkonu.

    Screenshot of Finish profile creation.

  7. Vyberte Dokončit a na stránce Publikovat vyberte Publikovat a nasaďte balíček obsahující 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.

  8. Na kartě Publikovat v části Hostování zvolte Otevřít na webu Azure Portal. Tím se na webu Azure Portal otevře nový prostředek aplikace funkcí Azure.

    Screenshot of Publish success message.

Nastavení aplikace funkcí

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.

Settings in Publish window

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í.

Application settings

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 vrácen do správy zdrojového kódu. To znamená, že pokud naklonujete 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é ladění

Pokud chcete aplikaci funkcí vzdáleně ladit, musíte publikovat konfiguraci ladění 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í

  • Vzdálené ladění se nedoporučuje v produkční službě.
  • Pokud máte povolené ladění Jen můj kód, zakažte ho.
  • Vyhýbejte se dlouhým zastavením zarážek 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í odesílá server data do sady Visual Studio, což může mít vliv na poplatky za šířku pásma. Informace o sazbách šířky pásma najdete v tématu Ceny Azure.
  • Vzdálené ladění se ve vaší aplikaci funkcí po 48 hodinách automaticky zakáže. Po 48 hodinách budete muset znovu spustit vzdálené ladění.

Připojit ladicí program

Způsob připojení ladicího programu 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 aplikaci funkcí spuštěné v procesu odděleně od hostitele Functions:

  1. Na kartě Publikovat vyberte tři tečky (...) v části Hostování 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 vyberte tři tečky (...) v části Hostování a pak zvolte Připojit ladicí program.

    Screenshot of attaching the debugger from Visual Studio.

    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ě se výchozí ladění nenaruší do kódu.

  3. Zpět v sadě Visual Studio zkopírujte adresu URL webu v části 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í ion, 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.

    Visual Studio attach to process dialog

  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.

    Visual Studio enter credential

  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 aplikaci funkcí ladit jako normální.

Připojení vzdáleného ladicího programu k aplikaci funkcí spuštěné v procesu pomocí hostitele Služby Functions:

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

    Screenshot of attaching the debugger from Visual Studio.

Visual Studio se připojí k aplikaci funkcí a povolí vzdálené ladění, pokud ještě není povolené. Vyhledá a připojí ladicí program k hostitelskému procesu aplikace. V tomto okamžiku můžete aplikaci funkcí ladit jako normální.

Zakázání vzdáleného 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 na webu Azure Portal k povolení vzdáleného ladění mimo Visual Studio.

Monitorovací funkce

Doporučený způsob, jak monitorovat provádění funkcí, je integrace aplikace funkcí s Aplikace Azure Přehledy. 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 povolit integraci aplikace Přehledy pro vaši aplikaci funkcí v Azure.

Další informace o monitorování pomocí služby Application Přehledy najdete v tématu Monitorování služby Azure Functions.

Testování funkcí

Tato část popisuje, jak vytvořit projekt modelu v procesu jazyka C#, který můžete testovat pomocí xUnit.

Testing Azure Functions with C# in Visual Studio

1. Nastavení

Pomocí těchto kroků nakonfigurujte prostředí, včetně projektu a funkcí aplikace, které jsou potřeba k podpoře testů:

  1. Vytvoření nové aplikace Functions a jeho pojmenování funkcí
  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ů.

2. Vytvoření testovacích tříd

Každá funkce přebírá instanci ILogger 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 ILogger rozhraní potřebuje třída obor. Následující třída napodobení oboru testovacích případů předat do ListLogger třídy.

  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 jako kontraktované ILogger rozhraním:

    • 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 .

    • Protokol: Tato metoda používá zadanou formatter funkci k naformá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í novou Dictionary metodu použitou k vytvoření QueryCollection představující řetězcové hodnoty 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í. Sleduje ListLogger protokolované 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 řetězcovými hodnotami name=Bill dotazu funkce HTTP a zkontroluje, jestli se vrátí očekávaná odpověď.

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

    • Timer_should_log_message: Tento test vytvoří instanci a ListLogger 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í.

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í.

Testing Azure Functions with C# in Visual Studio

4. Ladění testů

Pokud chcete ladit testy, nastavte pro test zarážku, přejděte do Průzkumníka testů a vyberte Spustit > poslední spuštění ladění.

Další kroky

Další informace o nástrojích Azure Functions Core Tools najdete v tématu Práce s nástroji Azure Functions Core Tools.