Vytvoření a spuštění kódu rozhraní .NET Framework z pracovních postupů Standard v Azure Logic Apps

Platí pro: Azure Logic Apps (Standard)

Pro řešení integrace, kde musíte vytvořit a spustit kód rozhraní .NET Framework 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 rozhraní .NET Framework 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.

Předpoklady

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.

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.

  1. Otevřete Visual Studio Code. Na panelu aktivit vyberte ikonu Azure . (Klávesnice: Shift+Alt+A)

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

    Screenshot shows Visual Studio Code, Azure window, Workspace section toolbar, and selected option for Create new logic app workspace.

  3. V poli Vybrat složku přejděte do místní složky, kterou jste vytvořili pro svůj projekt, a vyberte ji.

  4. Po zobrazení výzvy k vytvoření nového pracovního prostoru aplikace logiky zadejte název pracovního prostoru:

    Screenshot shows Visual Studio Code with prompt to enter workspace name.

    Tento příklad pokračuje s MyLogicAppWorkspace.

  5. Po zobrazení výzvy k výběru šablony projektu pro pracovní prostor aplikace logiky vyberte aplikaci logiky s vlastním projektem kódu.

    Screenshot shows Visual Studio Code with prompt to select project template for logic app workspace.

  6. Postupujte podle následujících výzev a zadejte následující ukázkové hodnoty:

    Item Příklad hodnoty
    Název funkce pro projekt funkcí WeatherForecast
    Název oboru názvů pro projekt funkcí Contoso.Enterprise
    Šablona pracovního postupu:
    - Stavový pracovní postup
    - Bezstavové pracovní postupy
    Stavový pracovní postup
    Název pracovního postupu MyWorkflow
  7. Vyberte Otevřít v aktuálním okně.

    Po dokončení tohoto kroku Visual Studio Code vytvoří váš pracovní prostor, který ve výchozím nastavení zahrnuje projekt funkcí a projekt aplikace logiky, například:

    Screenshot shows Visual Studio Code with created workspace.

    Uzel Popis
    <název pracovního prostoru> Obsahuje projekt funkcí i projekt pracovního postupu aplikace logiky.
    Functions Obsahuje artefakty projektu funkce. Například soubor function-name.cs je soubor kódu, <ve kterém můžete vytvořit kód.>
    LogicApp Obsahuje artefakty projektu aplikace logiky, včetně prázdného pracovního postupu.

Napsání kódu

  1. V pracovním prostoru rozbalte uzel Functions , pokud ještě není rozbalený.

  2. Otevřete soubor function-name.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.

    Soubor <function-name.cs> obsahuje ILogger také rozhraní, které poskytuje podporu událostí protokolování do prostředku Přehledy aplikace. Informace o trasování můžete odesílat do aplikace Přehledy 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);
    
        <...>
    
    }
    
  3. 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 funkce automaticky obsahuje úlohy sestavení, které 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 .

  1. V editoru Visual Studio Code v nabídce Terminál vyberte Nový terminál.

  2. V seznamu pracovních adresářů, který se zobrazí, vyberte jako aktuální pracovní adresář pro nový terminál funkci Functions .

    Screenshot shows Visual Studio Code, prompt for current working directory, and selected Functions directory.

    Visual Studio Code otevře okno terminálu s příkazovým řádkem.

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

    Screenshot shows Visual Studio Code, Terminal window, and completed dotnet restore command.

  4. 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ě.

  5. 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. Ověřte, že podsložka s názvem net472 obsahuje více souborů sestavení (DLL) potřebných ke spuštění kódu, včetně souboru s názvem< function-name.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:

    Screenshot shows Visual Studio Code and logic app workspace with function project and logic app project, now with the generated assemblies and other required files.

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.

  1. 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:

  2. Vyberte akci s názvem Volání místní funkce v této aplikaci logiky.

    Vpravo se otevře informační podokno akce.

    Screenshot shows Visual Studio Code, workflow designer, and default workflow with trigger and actions.

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

  1. 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
    1. V nabídce Zobrazení editoru Visual Studio Code vyberte Paleta příkazů.

    2. Na příkazovém řádku, který se zobrazí, vyhledejte a vyberte Azurite: Spustit službu Blob Service.

    3. V seznamu pracovních adresářů, který se zobrazí, vyberte LogicApp.

    4. 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:

    Screenshot shows Visual Studio Code taskbar with Azure Blob Service, Azure Queue Service, and Azure Table Service running.

  2. Na panelu aktivit editoru Visual Studio Code vyberte Spustit a Ladit. (Klávesnice: Ctrl+Shift+D)

    Screenshot shows Visual Studio Code Activity Bar with Run and Debug selected.

  3. 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).

    Screenshot shows Run and Debug list with Attach to logic app selected and Play button selected.

    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.

  4. V seznamu Spustit a ladit vyberte Připojit k funkcím .NET (Funkce) a pak vyberte Přehrát (zelená šipka).

    Screenshot shows Run and Debug list with Attach to NET Functions selected and Play button selected.

  5. Pokud chcete nastavit všechny zarážky, najděte v definici funkce (<function-name.cs>) nebo definici pracovního postupu (workflow.json) číslo řádku, kam chcete zarážku použít, a vyberte sloupec vlevo, například:

    Screenshot shows Visual Studio Code and the open function code file with a breakpoint set for a line in code.

  6. Pokud chcete v pracovním postupu ručně spustit trigger požadavku, otevřete stránku Přehled pracovního postupu.

    1. V projektu aplikace logiky otevřete místní nabídku souboru workflow.json 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.

      Screenshot shows Visual Studio Code and workflow's Overview page opened.

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

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

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

    Screenshot shows Visual Studio Code and finished workflow run.

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 lib/custom/net472 projektu aplikace logiky před nasazením. 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é rozhraní .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