Vytvoření a spuštění kódu .NET z pracovních postupů Standard v Azure Logic Apps
Platí pro: Azure Logic Apps (Standard)
V případě řešení integrace, kde musíte vytvářet a spouštět kód .NET z pracovního postupu standardní aplikace logiky, můžete použít Visual Studio Code s rozšířením Azure Logic Apps (Standard). Toto rozšíření poskytuje následující možnosti a výhody:
- Napište svůj vlastní kód vytvořením funkcí, které mají flexibilitu a kontrolu, abyste vyřešili vaše nejnáročnější problémy s integrací.
- Ladění kódu místně v editoru Visual Studio Code Projděte si kód a pracovní postupy ve stejné relaci ladění.
- Nasaďte kód společně s pracovními postupy. Nejsou potřeba žádné jiné plány služeb.
- Podporují scénáře migrace BizTalk Serveru, abyste mohli přesunout vlastní investice do .NET z místního prostředí do cloudu.
Díky možnosti psaní vlastního kódu můžete provádět například následující scénáře:
- Implementace vlastní obchodní logiky
- Vlastní analýza pro extrahování informací z příchozí zprávy
- Ověření dat a jednoduché transformace
- Formování zpráv pro odchozí zprávy do jiného systému, například rozhraní API
- Výpočty
Tato funkce není vhodná pro scénáře, jako jsou následující:
- Procesy, které poběží déle než 10 minut
- Velké zprávy a transformace dat
- Složité scénáře dávkování a debaty
- Součásti kanálu BizTalk Serveru, které implementují streamování
Další informace o omezeních v Azure Logic Apps najdete v tématu Omezení a konfigurace – Azure Logic Apps.
Požadavky
Účet a předplatné Azure. Pokud předplatné nemáte, zaregistrujte si bezplatný účet Azure.
Nejnovější Visual Studio Code s rozšířením Azure Logic Apps (Standard). Pokud chcete tyto požadavky splnit, podívejte se na požadavky pro vytváření standardních pracovních postupů v Azure Logic Apps s jedním tenantem pomocí editoru Visual Studio Code.
Funkce vlastních funkcí je aktuálně dostupná jenom v editoru Visual Studio Code, který běží v operačním systému Windows.
Funkce vlastních funkcí aktuálně podporuje volání rozhraní .NET Framework a .NET 8 pro pracovní postupy aplikací logiky hostované v Azure.
Místní složka, která se má použít k vytvoření projektu kódu
Omezení
Vytváření vlastních funkcí v současné době není na webu Azure Portal dostupné. Po nasazení funkcí z editoru Visual Studio Code do Azure ale postupujte podle kroků v části Volání kódu z pracovního postupu pro Azure Portal. Pomocí integrované akce s názvem Volání místní funkce v této aplikaci logiky můžete vybrat z nasazených vlastních funkcí a spustit kód. Následné akce v pracovním postupu můžou odkazovat na výstupy z těchto funkcí, jako v jakémkoli jiném pracovním postupu. Můžete zobrazit historii spuštění integrované akce, vstupy a výstupy.
Vlastní funkce používají izolovaný pracovní proces k vyvolání kódu v pracovním postupu aplikace logiky. Chcete-li zabránit konfliktům odkazů na balíčky mezi vlastním kódem funkce a pracovním procesem, použijte stejné verze balíčků, na které odkazuje pracovní proces. Úplný seznam balíčků a verze odkazované pracovním procesem naleznete v tématu Závislosti pracovního procesu a balíčku.
Vytvoření projektu kódu
Nejnovější rozšíření Azure Logic Apps (Standard) pro Visual Studio Code obsahuje šablonu projektu kódu, která poskytuje zjednodušené prostředí pro psaní, ladění a nasazování vlastního kódu s pracovními postupy. Tato šablona projektu vytvoří soubor pracovního prostoru a dva ukázkové projekty: jeden projekt pro zápis kódu, druhý projekt pro vytvoření pracovních postupů.
Poznámka:
Pro kód i pracovní postupy nemůžete použít stejnou složku projektu.
Otevřete Visual Studio Code. Na panelu aktivit vyberte ikonu Azure . (Klávesnice: Shift+Alt+A)
V okně Azure , které se otevře, na panelu nástrojů oddílu Pracovní prostor v nabídce Azure Logic Apps vyberte Vytvořit nový pracovní prostor aplikace logiky.
V poli Vybrat složku přejděte do místní složky, kterou jste vytvořili pro svůj projekt, a vyberte ji.
Po zobrazení výzvy k vytvoření nového pracovního prostoru aplikace logiky zadejte název pracovního prostoru:
Tento příklad pokračuje s MyLogicAppWorkspace.
Po zobrazení výzvy k výběru šablony projektu pro pracovní prostor aplikace logiky vyberte aplikaci logiky s vlastním projektem kódu.
V případě pracovních postupů aplikací logiky hostovaných v Azure postupujte podle výzvy a vyberte rozhraní .NET Framework nebo .NET 8.
Postupujte podle následujících výzev a zadejte následující ukázkové hodnoty:
Položka Příklad hodnoty Název funkce pro váš projekt funkcí .NET WeatherForecast Namespace název projektu funkcí .NET Contoso.Enterprise Šablona pracovního postupu:
- Stavový pracovní postup
- Bezstavové pracovní postupyStavový pracovní postup Název pracovního postupu MyWorkflow Vyberte Otevřít v aktuálním okně.
Po dokončení tohoto kroku Visual Studio Code vytvoří pracovní prostor, který obsahuje projekt funkcí .NET a projekt aplikace logiky, například:
Uzel Popis <název pracovního prostoru> Obsahuje projekt funkcí .NET i projekt pracovního postupu aplikace logiky. Functions Obsahuje artefakty pro projekt funkcí .NET. Například <název> funkce.cs soubor kódu, kde můžete vytvořit kód. LogicApp Obsahuje artefakty projektu aplikace logiky, včetně prázdného pracovního postupu.
Napsání kódu
V pracovním prostoru rozbalte uzel Functions , pokud ještě není rozbalený.
<Otevřete soubor název> funkce.cs s názvem WeatherForecast.cs v tomto příkladu.
Ve výchozím nastavení tento soubor obsahuje vzorový kód, který obsahuje následující prvky kódu spolu s dříve zadanými ukázkovými hodnotami tam, kde je to vhodné:
- Název oboru názvů
- Název třídy
- Název funkce
- Parametry funkce
- Návratový typ
- Komplexní typ
Následující příklad ukazuje kompletní vzorový kód:
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ namespace Contoso.Enterprise { using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Azure.Functions.Extensions.Workflows; using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; /// <summary> /// Represents the WeatherForecast flow invoked function. /// </summary> public class WeatherForecast { private readonly ILogger<WeatherForecast> logger; public WeatherForecast(ILoggerFactory loggerFactory) { logger = loggerFactory.CreateLogger<WeatherForecast>(); } /// <summary> /// Executes the logic app workflow. /// </summary> /// <param name="zipCode">The zip code.</param> /// <param name="temperatureScale">The temperature scale (e.g., Celsius or Fahrenheit).</param> [FunctionName("WeatherForecast")] public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale) { this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale); // Generate random temperature within a range based on the temperature scale Random rnd = new Random(); var currentTemp = temperatureScale == "Celsius" ? rnd.Next(1, 30) : rnd.Next(40, 90); var lowTemp = currentTemp - 10; var highTemp = currentTemp + 10; // Create a Weather object with the temperature information var weather = new Weather() { ZipCode = zipCode, CurrentWeather = $"The current weather is {currentTemp} {temperatureScale}", DayLow = $"The low for the day is {lowTemp} {temperatureScale}", DayHigh = $"The high for the day is {highTemp} {temperatureScale}" }; return Task.FromResult(weather); } /// <summary> /// Represents the weather information for WeatherForecast. /// </summary> public class Weather { /// <summary> /// Gets or sets the zip code. /// </summary> public int ZipCode { get; set; } /// <summary> /// Gets or sets the current weather. /// </summary> public string CurrentWeather { get; set; } /// <summary> /// Gets or sets the low temperature for the day. /// </summary> public string DayLow { get; set; } /// <summary> /// Gets or sets the high temperature for the day. /// </summary> public string DayHigh { get; set; } } } }
Definice funkce obsahuje výchozí
Run
metodu, kterou můžete použít k zahájení práce. Tato ukázkováRun
metoda demonstruje některé možnosti dostupné pomocí funkce vlastních funkcí, jako je předávání různých vstupů a výstupů, včetně složitých typů .NET.Název <funkce>.cs soubor také obsahuje
ILogger
rozhraní, které poskytuje podporu protokolování událostí do prostředku Application Insights. Informace o trasování můžete odesílat do Application Insights a ukládat je spolu s informacemi o trasování z pracovních postupů, například:private readonly ILogger<WeatherForecast> logger; public WeatherForecast(ILoggerFactory loggerFactory) { logger = loggerFactory.CreateLogger<WeatherForecast>(); } [FunctionName("WeatherForecast")] public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale) { this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale); <...> }
Nahraďte vzorový kód funkce vlastními a upravte výchozí
Run
metodu pro vlastní scénáře. Nebo můžete funkci zkopírovat, včetně[FunctionName("<*function-name*>")]
deklarace, a pak ji přejmenovat jedinečným názvem. Přejmenovanou funkci pak můžete upravit tak, aby vyhovovala vašim potřebám.
Tento příklad pokračuje vzorovým kódem bez jakýchkoli změn.
Kompilace a sestavení kódu
Po napsání kódu se zkompilujte a ujistěte se, že neexistují žádné chyby sestavení. Projekt funkcí .NET automaticky obsahuje úlohy sestavení, které se kompilují a pak přidávají váš kód do složky lib\custom v projektu aplikace logiky, kde pracovní postupy hledají vlastní funkce, které se mají spustit. Tyto úlohy umístí sestavení do složky lib\custom\net472 nebo lib\custom\net8 na základě vaší verze .NET.
V editoru Visual Studio Code v nabídce Terminál vyberte Nový terminál.
V seznamu pracovních adresářů, který se zobrazí, vyberte jako aktuální pracovní adresář pro nový terminál funkci Functions .
Visual Studio Code otevře okno terminálu s příkazovým řádkem.
V okně terminálu na příkazovém řádku zadejte dotnet restore.
Visual Studio Code analyzuje vaše projekty a určuje, jestli jsou aktuální.
Po opětovném zobrazení příkazového řádku zadejte dotnet build. Nebo v nabídce Terminál vyberte Spustit úlohu. V seznamu úkolů vyberte sestavení (Funkce).
Pokud sestavení proběhne úspěšně, okno terminálu oznámí, že sestavení proběhlo úspěšně.
Ověřte, že v projektu aplikace logiky existují následující položky:
V pracovním prostoru rozbalte následující složky: LogicApp>lib\custom>net472 nebo net8 na základě vaší verze .NET. Ověřte, že podsložka s názvem net472 nebo net8 obsahuje soubory sestavení (DLL) potřebné ke spuštění kódu včetně souboru s názvem< název> funkce.dll.
V pracovním prostoru rozbalte následující složky: LogicApp>lib\custom<>function-name.> Ověřte, že podsložka s názvem <název funkce> obsahuje soubor function.json, který obsahuje metadata o kódu funkce, který jste napsali. Návrhář pracovního postupu používá tento soubor k určení potřebných vstupů a výstupů při volání kódu.
Následující příklad ukazuje ukázková vygenerovaná sestavení a další soubory v projektu aplikace logiky:
Volání kódu z pracovního postupu
Po potvrzení, že se kód zkompiluje a že projekt aplikace logiky obsahuje potřebné soubory pro spuštění kódu, otevřete výchozí pracovní postup, který je součástí projektu aplikace logiky.
V pracovním prostoru v části LogicApp rozbalte <uzel názvu> pracovního postupu, otevřete místní nabídku pro workflow.json a vyberte Otevřít Návrhář.
V návrháři pracovního postupu, který se otevře, se zobrazí výchozí pracovní postup zahrnutý v projektu aplikace logiky s následující aktivační událostí a akcemi:
- Předdefinovaný trigger požadavku s názvem Při přijetí požadavku HTTP
- Integrovaná akce s názvem Volání místní funkce v této aplikaci logiky
- Předdefinovaná akce Odpovědi s názvem Odpověď, kterou použijete k odpovídání volajícímu, pouze když použijete trigger požadavku
Vyberte akci s názvem Volání místní funkce v této aplikaci logiky.
Vpravo se otevře informační podokno akce.
Zkontrolujte a ověřte, že je hodnota parametru Název funkce nastavená na funkci, kterou chcete spustit. Zkontrolujte nebo změňte jakékoli jiné hodnoty parametrů, které vaše funkce používá.
Ladění kódu a pracovního postupu
Opakujte následující kroky a třikrát spusťte emulátor úložiště Azurite: jednou pro následující služby Azure Storage:
- Azure Blob Service
- Služba fronty Azure
- Azure Table Service
V nabídce Zobrazení editoru Visual Studio Code vyberte Paleta příkazů.
Na příkazovém řádku, který se zobrazí, vyhledejte a vyberte Azurite: Spustit službu Blob Service.
V seznamu pracovních adresářů, který se zobrazí, vyberte LogicApp.
Opakujte tento postup pro Azurite: Spustit službu fronty a Azurite: Start Table Service.
Po úspěšném spuštění hlavního panelu editoru Visual Studio Code v dolní části obrazovky se zobrazí tři spuštěné služby úložiště, například:
Pomocí následujícího postupu připojte ladicí program k projektu aplikace logiky:
Na panelu aktivit editoru Visual Studio Code vyberte Spustit a Ladit. (Klávesnice: Ctrl+Shift+D)
V seznamu Spustit a ladit vyberte Připojit k aplikaci logiky (LogicApp), pokud ještě není vybraná, a pak vyberte Přehrát (zelená šipka).
Otevře se okno terminálu a zobrazí se spuštěný proces ladění. Zobrazí se okno konzoly ladění a zobrazí se stavy ladění. V dolní části editoru Visual Studio Code se hlavní panel změní na oranžovou, což znamená, že je načten ladicí program .NET.
Pomocí následujícího postupu na základě kódu připojte ladicí program k projektu funkcí .NET:
Projekty .NET 8
V nabídce Zobrazení editoru Visual Studio Code vyberte Paleta příkazů.
Na paletě příkazů vyhledejte a vyberte Ladit: Připojit k procesu .NET 5 nebo .NET Core.
V seznamu vyhledejte a vyberte proces dotnet.exe . Pokud existuje více dotnet.exe procesů, vyberte proces, který má následující cestu:
<drive-name>:\Users<user-name.azure-functions-core-tools>\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle.Workflows<extension-bundle-version>\CustomCodeNetFxWorker\net8\Microsoft.Azure.Workflows.Functions.CustomCodeNetFxWorker.dll
Projekty rozhraní .NET Framework
V seznamu Spustit a ladit vyberte Připojit k funkcím .NET (Funkce), pokud ještě nejsou vybrané, a pak vyberte Přehrát (zelená šipka).
Pokud chcete nastavit zarážky, najděte v definici funkce (<název> funkce.cs) nebo definici pracovního postupu (workflow.json), najděte číslo řádku, kde chcete zarážku, a vyberte sloupec vlevo, například:
Pokud chcete v pracovním postupu ručně spustit trigger požadavku, otevřete stránku Přehled pracovního postupu.
V projektu aplikace logiky otevřete místní nabídku workflow.json souboru a vyberte Přehled.
Na stránce Přehled pracovního postupu je tlačítko Spustit trigger k dispozici, pokud chcete pracovní postup spustit ručně. V části Vlastnosti pracovního postupu je hodnota adresy URL zpětného volání adresa URL pro volatelný koncový bod vytvořený triggerem požadavku ve vašem pracovním postupu. Na tuto adresu URL můžete odesílat požadavky, které aktivují pracovní postup z jiných aplikací, včetně dalších pracovních postupů aplikace logiky.
Na panelu nástrojů stránky Přehled vyberte Aktivační událost spustit.
Jakmile se pracovní postup spustí, ladicí program aktivuje první zarážku.
V nabídce Spustit nebo panelu nástrojů ladicího programu vyberte akci ladění.
Po dokončení pracovního postupu se na stránce Přehled zobrazí dokončené spuštění a základní podrobnosti o tomto spuštění.
Pokud chcete zkontrolovat další informace o spuštění pracovního postupu, vyberte dokončené spuštění. Nebo v seznamu vedle sloupce Doba trvání vyberte Zobrazit spuštění.
Nasazení kódu
Vlastní funkce můžete nasadit stejným způsobem jako projekt aplikace logiky. Bez ohledu na to, jestli nasazujete z editoru Visual Studio Code nebo používáte proces CI/CD DevOps, ujistěte se, že kód sestavíte a že všechna závislá sestavení existují ve složce projektu následující aplikace logiky před nasazením:
.NET 4.7.2: složka lib/custom/net472
.NET 8: lib/custom/net8 folder
Další informace najdete v tématu Nasazení standardních pracovních postupů z editoru Visual Studio Code do Azure.
Poradce při potížích
Chyba podokna informací o akci
Když v návrháři pracovního postupu vyberete integrovanou akci s názvem Volání místní funkce v této aplikaci logiky, zobrazí se v informačním podokně akce následující zpráva:
Failed to retrieve dynamic inputs. Error details:
V tomto scénáři zkontrolujte projekt aplikace logiky a zkontrolujte, jestli je logicApp\lib\custom složka prázdná. Pokud je prázdná, v nabídce Terminál vyberte Spustit funkce sestavení úlohy>.
Aktuálně není spuštěn žádný proces se zadaným názvem.
Pokud se vám při spuštění pracovního postupu zobrazí tato chybová zpráva, pravděpodobně máte k aplikaci logiky připojený proces ladicího programu k funkcím .NET.
Pokud chcete tento problém vyřešit, vyberte v seznamu Spustit a ladit možnost Připojit k aplikaci logiky (LogicApp) a pak vyberte Přehrát (zelený trojúhelník).
Balíček se neimportoval správně
Pokud se v okně Výstup zobrazí chyba podobná následující zprávě, ujistěte se, že máte nainstalovaný aspoň .NET 6.0. Pokud máte tuto verzi nainstalovanou, zkuste ji odinstalovat a znovu nainstalovat.
C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.targets(83,5): warning : The ExtensionsMetadataGenerator package was not imported correctly. Are you missing 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.targets' or 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.props'? [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] WeatherForecast -> C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\\bin\Debug\net472\WeatherForecast.dll C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : It was not possible to find any compatible framework version [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : The specified framework 'Microsoft.NETCore.App', version '6.0.0' was not found. [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : - Check application dependencies and target a framework version installed at: [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj]
Selhání sestavení
Pokud vaše funkce neobsahuje proměnné a sestavíte kód, může se v okně Výstup zobrazit následující chybové zprávy:
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
Build FAILED.
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
0 Warning(s)
2 Error(s)
Pokud chcete tento problém vyřešit, připojte v metodě kódu Run
následující parametr:
string parameter1 = null
Následující příklad ukazuje, jak se Run
zobrazí podpis metody:
public static Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale, string parameter1 = null)
Další kroky
Vytváření standardních pracovních postupů pomocí editoru Visual Studio Code