.NET-keretrendszer kód létrehozása és futtatása standard munkafolyamatokból az Azure Logic Appsben

A következőkre vonatkozik: Azure Logic Apps (Standard)

Olyan integrációs megoldások esetén, ahol .NET-keretrendszer kódot kell létrehoznia és futtatnia a Standard logikai alkalmazás munkafolyamatából, használhatja a Visual Studio Code-ot az Azure Logic Apps (Standard) bővítménnyel. Ez a bővítmény a következő képességeket és előnyöket biztosítja:

  • Saját kód megírásához olyan függvényeket hozhat létre, amelyek rugalmasságával és vezérlésével megoldhatja a legnagyobb kihívást jelentő integrációs problémákat.
  • Kód helyi hibakeresése a Visual Studio Code-ban. Haladjon végig a kódon és a munkafolyamatokon ugyanabban a hibakeresési munkamenetben.
  • Kódot helyezhet üzembe a munkafolyamatok mellett. Nincs szükség más szolgáltatási csomagokra.
  • Támogassa a BizTalk Server migrálási forgatókönyveit, hogy egyéni .NET-keretrendszer befektetéseket helyezhesse át a helyszínről a felhőbe.

A saját kód megírásának képességével olyan forgatókönyveket hajthat végre, mint a következők:

  • Egyéni üzleti logika implementálása
  • Egyéni elemzés egy bejövő üzenetből származó információk kinyeréséhez
  • Adatérvényesítés és egyszerű átalakítások
  • Üzenetformázás egy másik rendszerbe irányuló kimenő üzenetekhez, például API-hoz
  • Számítások

Ez a képesség nem alkalmas olyan helyzetekre, mint például a következők:

  • 10 percnél hosszabb időt igénylő folyamatok futtatása
  • Nagyméretű üzenet- és adatátalakítások
  • Összetett kötegelési és -feloldási forgatókönyvek
  • BizTalk Server-folyamat összetevői, amelyek streamelést implementálnak

Az Azure Logic Apps korlátaival kapcsolatos további információkért lásd: Korlátok és konfiguráció – Azure Logic Apps.

Előfeltételek

  • Azure-fiók és -előfizetés. Ha még nincs előfizetése, regisztráljon egy ingyenes Azure-fiókra.

  • Visual Studio Code az Azure Logic Apps (Standard) bővítménnyel. Ezeknek a követelményeknek való megfeleléshez tekintse meg az egybérlős Azure Logic Apps és a Visual Studio Code standard munkafolyamatainak létrehozásának előfeltételeit.

    • Az egyéni függvények képessége jelenleg csak Windows operációs rendszeren futó Visual Studio Code-ban érhető el.

    • Az egyéni függvények képessége jelenleg csak .NET-keretrendszer 4.7.2-szerelvények meghívását támogatja.

  • A kódprojekt létrehozásához használandó helyi mappa

Korlátozások

Az egyéni függvények létrehozása jelenleg nem érhető el az Azure Portalon. Miután azonban üzembe helyezi a függvényeket a Visual Studio Code-ból az Azure-ba, kövesse a Kód meghívása az Azure Portal munkafolyamatából című témakörben leírt lépéseket. Ebben a logikai alkalmazásban a Helyi függvény meghívása nevű beépített művelet használatával választhat az üzembe helyezett egyéni függvényekből, és futtathatja a kódot. A munkafolyamat későbbi műveletei hivatkozhatnak ezekből a függvényekből származó kimenetekre, mint bármely más munkafolyamatban. Megtekintheti a beépített művelet futtatási előzményeit, bemeneteit és kimeneteit.

Kódprojekt létrehozása

A Visual Studio Code legújabb Azure Logic Apps (Standard) bővítménye tartalmaz egy kódprojekt-sablont, amely leegyszerűsíti a saját kód írását, hibakeresését és üzembe helyezését a munkafolyamatokkal. Ez a projektsablon létrehoz egy munkaterületfájlt és két mintaprojektet: egy projektet a kód megírásához, a másik projektet a munkafolyamatok létrehozásához.

Megjegyzés:

Nem használhatja ugyanazt a projektmappát a kódhoz és a munkafolyamatokhoz.

  1. Nyissa meg a Visual Studio Code-ot. A tevékenységsávon válassza az Azure ikont. (Billentyűzet: Shift+Alt+A)

  2. A megnyíló Azure-ablakban, a Munkaterület szakasz eszköztárán, az Azure Logic Apps menüben válassza az Új logikaialkalmazás-munkaterület létrehozása lehetőséget.

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

  3. A Mappa kiválasztása párbeszédpanelen keresse meg és válassza ki a projekthez létrehozott helyi mappát.

  4. Amikor megjelenik az Új logikaialkalmazás-munkaterület létrehozása párbeszédpanel, adja meg a munkaterület nevét:

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

    Ez a példa a MyLogicAppWorkspace használatával folytatódik.

  5. Amikor megjelenik a Select a project template for your logic app workspace prompt box, válassza az egyéni kódprojekttel rendelkező Logikai alkalmazás lehetőséget.

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

  6. Kövesse a következő utasításokat a következő példaértékek megadásához:

    Cikk Példaérték
    Függvényprojekt függvényneve WeatherForecast
    Függvényprojekt névterének neve Contoso.Enterprise
    Munkafolyamat-sablon:
    - Állapotalapú munkafolyamat
    - Állapot nélküli munkafolyamat
    Állapotalapú munkafolyamat
    Munkafolyamat neve MyWorkflow
  7. Válassza a Megnyitás az aktuális ablakban lehetőséget.

    A lépés befejezése után a Visual Studio Code alapértelmezés szerint létrehozza a munkaterületet, amely magában foglal egy függvényprojektet és egy logikai alkalmazásprojektet, például:

    Screenshot shows Visual Studio Code with created workspace.

    Csomópont Leírás
    <munkaterület neve> A függvényprojektet és a logikai alkalmazás munkafolyamat-projektét is tartalmazza.
    Functions A függvényprojekt összetevőit tartalmazza. A function-name.cs> fájl például <az a kódfájl, amelyben megadhatja a kódot.
    Logikai alkalmazás Tartalmazza a logikai alkalmazásprojekt összetevőit, beleértve egy üres munkafolyamatot is.

Kód írása

  1. A munkaterületen bontsa ki a Functions csomópontot, ha még nem bontotta ki.

  2. Nyissa meg ebben a példában a <WeatherForecast.cs nevű függvény-name.cs> fájlt.

    Alapértelmezés szerint ez a fájl mintakódot tartalmaz, amely a következő kódelemeket tartalmazza a korábban megadott példaértékekkel együtt, ha szükséges:

    • Névtér neve
    • Osztály neve
    • Függvénynév
    • Függvényparaméterek
    • Visszatérési típus
    • Összetett típus

    Az alábbi példa a teljes mintakódot mutatja be:

    //------------------------------------------------------------
    // 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; }
            }
        }
    }
    

    A függvénydefiníció egy alapértelmezett Run metódust tartalmaz, amelyet az első lépésekhez használhat. Ez a mintametódus Run bemutatja az egyéni függvények funkcióval elérhető képességek némelyikét, például különböző bemenetek és kimenetek átadását, beleértve az összetett .NET-típusokat is.

    A <function-name.cs> fájl tartalmazza az ILogger interfészt is, amely támogatja az eseménynaplózást egy alkalmazás Elemzések erőforrásba. Nyomkövetési információkat küldhet az Alkalmazás Elemzések, és ezeket az információkat a munkafolyamatokból származó nyomkövetési információk mellett tárolhatja, például:

    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. Cserélje le a mintafüggvénykódot a sajátra, és szerkessze a saját forgatókönyvek alapértelmezett Run metódusát. Másolhatja a függvényt, beleértve a [FunctionName("<*function-name*>")] deklarációt is, majd átnevezheti a függvényt egyedi névvel. Ezután szerkesztheti az átnevezett függvényt az igényeinek megfelelően.

Ez a példa módosítások nélkül folytatódik a mintakóddal.

A kód fordítása és összeállítása

Miután befejezte a kód írását, lefordítva győződjön meg arról, hogy nincsenek buildelési hibák. A függvényprojekt automatikusan tartalmazza a buildelési feladatokat, amelyek lefordítják, majd hozzáadják a kódot a logikai alkalmazás projekt lib\egyéni mappájához, ahol a munkafolyamatok egyéni függvényeket keresnek a futtatáshoz. Ezek a feladatok a szerelvényeket a lib\custom\net472 mappába helyezik.

  1. A Visual Studio Code Terminál menüjében válassza az Új terminál lehetőséget.

  2. A megjelenő munkakönyvtár-listából válassza a Functions elemet az új terminál aktuális munkakönyvtáraként.

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

    A Visual Studio Code egy parancssort tartalmazó terminálablakot nyit meg.

  3. A terminálablak parancssorában adja meg a dotnet-visszaállítást.

    A Visual Studio Code elemzi a projekteket, és meghatározza, hogy naprakészek-e.

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

  4. Miután a parancssor ismét megjelent, adja meg a dotnet buildet. Vagy a Terminál menüben válassza a Feladat futtatása lehetőséget. A feladatlistában válassza a Build (Functions) lehetőséget.

    Ha a build sikeres, a terminálablak azt jelenti, hogy a build sikeres volt.

  5. Győződjön meg arról, hogy a következő elemek szerepelnek a logikai alkalmazás projektjében:

    • A munkaterületen bontsa ki a következő mappákat: LogicApp>lib\custom>net472. Győződjön meg arról, hogy a net472 nevű almappában megtalálható a kód futtatásához szükséges több szerelvényfájl (DLL), beleértve a függvény-name.dll> nevű< fájlt is.

    • A munkaterületen bontsa ki a következő mappákat: LogicApp>lib\custom<>function-name.> Győződjön meg arról, hogy a függvénynév> nevű< almappában található egy function.json fájl, amely tartalmazza az Ön által írt függvénykód metaadatait. A munkafolyamat-tervező ezzel a fájllal határozza meg a kód meghívásakor szükséges bemeneteket és kimeneteket.

    Az alábbi példa a logikai alkalmazás projektjében létrehozott mintaszerelvényeket és más fájlokat mutatja be:

    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.

Kód meghívása munkafolyamatból

Miután meggyőződett arról, hogy a kód lefordítva van, és hogy a logikaialkalmazás-projekt tartalmazza a kód futtatásához szükséges fájlokat, nyissa meg a logikai alkalmazás projektjéhez tartozó alapértelmezett munkafolyamatot.

  1. A munkaterületen a LogicApp alatt bontsa ki a< munkafolyamat-név> csomópontot, nyissa meg a workflow.json helyi menüjét, és válassza a Megnyitás Tervező lehetőséget.

    A megnyíló munkafolyamat-tervezőben a logikai alkalmazás projektjéhez tartozó alapértelmezett munkafolyamat a következő eseményindítóval és műveletekkel jelenik meg:

    • A HTTP-kérés fogadásakor elnevezett beépített kérelem-eseményindító
    • A logikai alkalmazás Helyi függvény meghívása nevű beépített művelete
    • A Válasz nevű beépített válaszművelet, amellyel csak akkor válaszolhat a hívónak, ha a Kérés eseményindítót használja
  2. Válassza ki a helyi függvény meghívása nevű műveletet ebben a logikai alkalmazásban.

    A művelet információs panelje jobbra nyílik meg.

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

  3. Ellenőrizze és ellenőrizze, hogy a függvénynév paraméter értéke a futtatni kívánt függvényre van-e beállítva. Tekintse át vagy módosítsa a függvény által használt egyéb paraméterértékeket.

A kód és a munkafolyamat hibakeresése

  1. Ismételje meg a következő lépéseket az Azurite Storage Emulator háromszori elindításához: egyenként a következő Azure Storage-szolgáltatásokhoz:

    • Azure Blob Service
    • Az Azure üzenetsor-kezelési Queue szolgáltatása
    • Azure Table Service
    1. A Visual Studio Code View menüjében válassza a Parancskatalógus lehetőséget.

    2. A megjelenő parancssorban keresse meg és válassza az Azurite: Blob Service indítása lehetőséget.

    3. A megjelenő munkakönyvtár-listából válassza a LogicApp lehetőséget.

    4. Ismételje meg az alábbi lépéseket az Azurite: Queue Service indítása és az Azurite: Táblaszolgáltatás indítása.

    Sikeresnek bizonyul, ha a képernyő alján található Visual Studio Code tálcán látható a három futó tárolási szolgáltatás, például:

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

  2. A Visual Studio Code tevékenységsávján válassza a Futtatás és hibakeresés lehetőséget. (Billentyűzet: Ctrl+Shift+D)

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

  3. A Futtatás és hibakeresés listában válassza a Csatolás a logikai alkalmazáshoz (LogicApp) lehetőséget, ha még nincs kijelölve, majd válassza a Lejátszás (zöld nyíl) lehetőséget.

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

    Megnyílik a terminálablak , és megjeleníti az elindított hibakeresési folyamatot. Ekkor megjelenik a Hibakeresési konzol ablak, és megjeleníti a hibakeresési állapotokat. A Visual Studio Code alján a tevékenységsáv narancssárgára változik, ami azt jelzi, hogy a .NET-hibakereső be van töltve.

  4. A Futtatás és hibakeresés listában válassza a Csatolás a .NET-függvényekhez (Functions) lehetőséget, majd a Lejátszás (zöld nyíl) lehetőséget.

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

  5. Töréspontok beállításához a függvénydefinícióban (<function-name.cs>) vagy munkafolyamat-definícióban (workflow.json) keresse meg a törésponthoz tartozó sorszámot, és válassza ki a bal oldali oszlopot, például:

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

  6. Ha manuálisan szeretné futtatni a Kérelem eseményindítót a munkafolyamatban, nyissa meg a munkafolyamat Áttekintés lapját.

    1. A logikai alkalmazás projektjében nyissa meg a workflow.json fájl helyi menüjét, és válassza az Áttekintés lehetőséget.

      A munkafolyamat Áttekintés lapján a Futtatás eseményindító gomb érhető el, ha manuálisan szeretné elindítani a munkafolyamatot. A Munkafolyamat tulajdonságai területen a visszahívási URL-érték egy meghívható végpont URL-címe, amelyet a munkafolyamat Kérés eseményindítója hozott létre. Erre az URL-címre küldhet kéréseket a munkafolyamat más alkalmazásokból való aktiválásához, beleértve az egyéb logikai alkalmazások munkafolyamatait is.

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

  7. Az Áttekintés lap eszköztárán válassza a Futtatás eseményindítót.

    A munkafolyamat futtatása után a hibakereső aktiválja az első töréspontot.

  8. A Futtatás menüben vagy a hibakereső eszköztáron válasszon egy hibakeresési műveletet.

    A munkafolyamat futtatása után az Áttekintés lapon látható a futtatás befejeződött és a futtatás alapvető részletei.

  9. A munkafolyamat futtatásával kapcsolatos további információk áttekintéséhez válassza ki a befejezett futtatás lehetőséget. Vagy az Időtartam oszlop melletti listából válassza a Futtatás megjelenítése lehetőséget.

    Screenshot shows Visual Studio Code and finished workflow run.

A kód üzembe helyezése

Az egyéni függvényeket ugyanúgy helyezheti üzembe, mint a logikai alkalmazásprojektet. Függetlenül attól, hogy a Visual Studio Code-ból telepít, vagy CI/CD DevOps-folyamatot használ, győződjön meg arról, hogy létrehozza a kódot, és hogy az üzembe helyezés előtt minden függő szerelvény szerepel-e a logikaialkalmazás-projekt lib/custom/net472 mappájában. További információ: Standard munkafolyamatok üzembe helyezése a Visual Studio Code-ból az Azure-ba.

Problémák elhárítása

Műveletinformációs ablaktábla hibája

A munkafolyamat-tervezőben, amikor kiválasztja a helyi függvény meghívása nevű beépített műveletet ebben a logikai alkalmazásban, a művelet információs paneljén a következő üzenet jelenik meg:

Failed to retrieve dynamic inputs. Error details:

Ebben a forgatókönyvben vizsgálja meg a logikai alkalmazásprojektet annak ellenőrzéséhez, hogy a LogicApp\lib\custom mappa üres-e. Ha üres, a Terminál menüben válassza a Feladat>buildelési függvényeinek futtatása lehetőséget.

Jelenleg nem fut folyamat a megadott névvel

Ha ezt a hibaüzenetet kapja a munkafolyamat futtatásakor, valószínűleg a hibakereső folyamat a .NET Functionshez van csatlakoztatva a logikai alkalmazás helyett.

A probléma megoldásához válassza a Futtatás és hibakeresés listában a Csatolás a logikai alkalmazáshoz (LogicApp) lehetőséget, majd a Lejátszás (zöld háromszög) lehetőséget.

A csomag nincs megfelelően importálva

Ha a Kimenet ablak az alábbi üzenethez hasonló hibaüzenetet jelenít meg, győződjön meg arról, hogy telepítve van a .NET 6.0. Ha telepítve van ez a verzió, próbálja meg eltávolítani, majd újratelepíteni.

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]

Buildelési hibák

Ha a függvény nem tartalmaz változókat, és létrehozza a kódot, a Kimenet ablakban a következő hibaüzenetek jelenhetnek meg:

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)

A probléma megoldásához a kód metódusában Run fűzze hozzá a következő paramétert:

string parameter1 = null

Az alábbi példa bemutatja, hogyan jelenik meg a Run metódus aláírása:

public static Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale, string parameter1 = null)

Következő lépések

Standard munkafolyamatok létrehozása a Visual Studio Code használatával