Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ů.
V nabídce sady Visual Studio vyberte Soubor>>
V části Vytvořit nový projekt zadejte do vyhledávacího pole funkce , zvolte šablonu Azure Functions a pak vyberte Další.
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.
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. 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. 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.
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ě:
Na webu Azure Portal přejděte ke svému účtu úložiště.
Na kartě Přístupové klíče pod zabezpečením a sítí zkopírujte připojovací řetězecklíče 1.
V projektu otevřete soubor local.settings.json a nastavte hodnotu
AzureWebJobsStorage
klíče na připojovací řetězec, který jste zkopírovali.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.
V Průzkumník řešení klikněte pravým tlačítkem na uzel projektu a vyberte >.
Zadejte název třídy a pak vyberte Přidat.
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.
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.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 atributemFunction
. 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 atributemFunctionName
. 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:
Ujistěte se, že jste projekt nakonfigurovali pro místní vývoj.
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.
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říklad4.0.0
. Platné verze jsou uvedeny na jednotlivých stránkách balíčku na NuGet.org.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.
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
parametruout
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í:
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.
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.
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ší.
V konkrétním cíli vyberte Aplikaci funkcí Azure (Linux) a pak vyberte Další.
Plán Flex Consumption vyžaduje Linux.
V instanci služby Functions vyberte Vytvořit nový.
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-9
a-
.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. 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.
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.
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.
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.
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í.
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ů:
- Použití portálu Azure Portal
-
--publish-local-settings
Použití možnosti publikování v nástrojích Azure Functions Core Tools - Použijte rozhraní příkazového řádku Azure
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:
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í.
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.
Vraťte se do Visual Studio a zkopírujte adresu URL pro web v sekci Hostování na stránce Publikovat.
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.Pokud se zobrazí výzva, povolte sadě Visual Studio přístup přes místní bránu firewall.
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.
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.
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ý.
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ů:
- Vytvořte novou aplikaci Functions a pojmenujte ji Functions
- Vytvořte z šablony funkci HTTP a pojmenujte ji MyHttpTrigger.
- Vytvořte funkci časovače ze šablony a pojmenujte ji MyTimerTrigger.
- V řešení vytvořte aplikaci xUnit Test a pojmenujte ji Functions.Tests. Odeberte výchozí testovací soubory.
- Přidání odkazu z testovací aplikace do Microsoft.AspNetCore.Mvc pomocí NuGetu
- 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í.
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řídyListLogger
.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() { } } }
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ímILogger
.BeginScope
: Obory přidávají do protokolování kontext. V tomto případě test pouze odkazuje na statickou instanci třídyNullScope
, aby test mohl fungovat.IsEnabled
: Je k dispozici výchozí hodnotafalse
.Log
: Tato metoda používá zadanouformatter
funkci k formátování zprávy a pak přidá výsledný text doLogs
kolekce.
Kolekce
Logs
je instanceList<string>
a je inicializována v konstruktoru.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.
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émListLogger
sleduje zaznamenané zprávy, které jsou k dispozici pro vyhodnocení v testech.
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 dotazuname=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ří instanciListLogger
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.
Pokud chcete získat přístup k nastavení aplikace v testech, můžete do funkce vložit
IConfiguration
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í.
Krok 4: Ladění testů
Pokud chcete ladit testy, nastavte pro test zarážku, přejděte do Průzkumníka testů a vyberte >.