.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.
Nyissa meg a Visual Studio Code-ot. A tevékenységsávon válassza az Azure ikont. (Billentyűzet: Shift+Alt+A)
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.
A Mappa kiválasztása párbeszédpanelen keresse meg és válassza ki a projekthez létrehozott helyi mappát.
Amikor megjelenik az Új logikaialkalmazás-munkaterület létrehozása párbeszédpanel, adja meg a munkaterület nevét:
Ez a példa a MyLogicAppWorkspace használatával folytatódik.
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.
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 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:
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
A munkaterületen bontsa ki a Functions csomópontot, ha még nem bontotta ki.
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ódusRun
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); <...> }
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.
A Visual Studio Code Terminál menüjében válassza az Új terminál lehetőséget.
A megjelenő munkakönyvtár-listából válassza a Functions elemet az új terminál aktuális munkakönyvtáraként.
A Visual Studio Code egy parancssort tartalmazó terminálablakot nyit meg.
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.
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.
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:
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.
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
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.
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
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
A Visual Studio Code View menüjében válassza a Parancskatalógus lehetőséget.
A megjelenő parancssorban keresse meg és válassza az Azurite: Blob Service indítása lehetőséget.
A megjelenő munkakönyvtár-listából válassza a LogicApp lehetőséget.
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:
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)
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.
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.
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.
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:
Ha manuálisan szeretné futtatni a Kérelem eseményindítót a munkafolyamatban, nyissa meg a munkafolyamat Áttekintés lapját.
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.
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.
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.
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.
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