Přidání a spuštění skriptů jazyka C# s využitím standardních pracovních postupů pro Azure Logic Apps (Preview)
Platí pro: Azure Logic Apps (Standard)
Poznámka:
Tato funkce je ve verzi Preview a podléhá dodatečným podmínkám použití pro microsoft Azure Preview.
Pokud chcete provádět vlastní úlohy integrace s pracovním postupem Standard v Azure Logic Apps, můžete přímo přidávat a spouštět skripty jazyka C# z pracovního postupu. Pro tuto úlohu použijte akci Vložený kód s názvem Execute CSharp Script Code. Tato akce vrátí výsledky ze skriptu, abyste mohli tento výstup použít v následných akcích pracovního postupu.
Tato funkce poskytuje následující výhody:
Napište vlastní skripty v návrháři pracovního postupu, abyste mohli řešit složitější problémy s integrací bez nutnosti používat Azure Functions. Nejsou potřeba žádné jiné plány služeb.
Tato výhoda zjednodušuje vývoj pracovních postupů a snižuje složitost a náklady při správě dalších služeb.
Vygenerujte vyhrazený soubor kódu, který poskytuje přizpůsobený skriptovací prostor v rámci pracovního postupu.
Nasaďte skripty společně s pracovními postupy.
Tento průvodce ukazuje, jak přidat akci do pracovního postupu a přidat kód skriptu jazyka C#, který chcete spustit.
Požadavky
Účet a předplatné Azure. Pokud předplatné nemáte, zaregistrujte si bezplatný účet Azure.
Pracovní postup standardní aplikace logiky, do kterého chcete přidat skript jazyka C#. Pracovní postup už musí začínat triggerem. Další informace najdete v tématu Vytvoření ukázkových pracovních postupů standardní aplikace logiky.
Pro svůj scénář můžete použít libovolnou aktivační událost, ale jako příklad tato příručka používá trigger požadavku s názvem Při přijetí požadavku HTTP a také akci Odpověď. Pracovní postup se spustí, když jiná aplikace nebo pracovní postup odešle požadavek na adresu URL koncového bodu triggeru. Ukázkový skript vrátí výsledky spuštění kódu jako výstup, který můžete použít v následných akcích.
Ukázkové scénáře
Následující seznam popisuje některé ukázkové scénáře, ve kterých můžete skript použít s určitými úlohami integrace:
Parsování a provádění transformací nebo manipulace s datovou částí nad rámec integrovaných výrazů a možností operací s daty Můžete například použít skript k vrácení upraveného schématu pro podřízené zpracování.
Správa prostředků Azure, jako jsou virtuální počítače, a jejich spuštění nebo krokování na základě určité obchodní logiky
Spusťte uloženou proceduru na SQL Serveru, který musí běžet podle plánu, a uložte výsledky na SharePointu.
Protokolujte chyby pracovního postupu s podrobnými informacemi uložením do Služby Azure Storage nebo e-mailem nebo upozorněte tým.
Zašifrujte a dešifrujte data tak, aby vyhovovala standardům zabezpečení rozhraní API.
Předání souboru do skriptu do souboru ZIP nebo rozbalení požadavku HTTP.
Agregace dat z různých rozhraní API a souborů za účelem vytváření denních sestav
Důležité informace
Azure Portal uloží váš skript jako soubor skriptu jazyka C# (.csx) do stejné složky jako soubor workflow.json , který uloží definici JSON pro váš pracovní postup a nasadí ho do prostředku aplikace logiky spolu s definicí pracovního postupu. Azure Logic Apps tento soubor zkompiluje, aby byl skript připravený ke spuštění.
Formát souboru .csx umožňuje psát méně "často používané" a soustředit se jen na psaní funkce jazyka C#. Soubor .csx můžete přejmenovat pro snadnější správu během nasazování. Při každém přejmenování skriptu však nová verze přepíše předchozí verzi.
Skript je místní pro pracovní postup. Pokud chcete použít stejný skript v jiných pracovních postupech, zobrazte soubor skriptu v konzole KuduPlus a zkopírujte skript, který chcete použít v jiných pracovních postupech.
Omezení
Název | Omezení | Notes |
---|---|---|
Doba trvání spuštění skriptu | 10 minut | Pokud máte scénáře, které potřebují delší dobu trvání, použijte možnost zpětné vazby k produktu a poskytněte další informace o vašich potřebách. |
Velikost výstupu | 100 MB | Velikost výstupu závisí na limitu velikosti výstupu pro akce, což je obecně 100 MB. |
Přidání akce Spustit kód skriptu CSharp
Na webu Azure Portal otevřete prostředek aplikace logiky Standard a pracovní postup v návrháři.
V návrháři přidejte do pracovního postupu akci Operace vloženého kódu s názvem Execute CSharp Script Code.
Jakmile se otevře podokno s informacemi o akci, aktualizujte na kartě Parametry v poli Soubor kódu předem připravený ukázkový kód vlastním kódem skriptu.
V horní části skriptu naimportujte potřebné obory názvů a přidejte všechny požadované odkazy na sestavení obvyklým způsobem.
Implementujte metodu
Run
:Název
Run
metody je předdefinovaný a pracovní postup se spustí pouze voláním této metody Run za běhu.Pro přístup k datům přicházejícím z pracovního postupu
Run
metoda přijímá tato data prostřednictvím parametru s typem WorkflowContext . Objekt WorkflowContext můžete použít pro následující úlohy:Pokud chcete vrátit výsledky skriptu nebo jiná data do pracovního postupu, implementujte
Run
metodu s návratovým typem. Další informace naleznete v tématu Vrácení dat do pracovního postupu.Pokud chcete protokolovat výstup skriptu v jazyce C#, implementujte
Run
metodu, která přijímá protokolovací nástroj funkce prostřednictvím parametru s typemILogger
, a použijtelog
ho jako název argumentu pro snadnou identifikaci. Vyhněte se zahrnutíConsole.Write
do skriptu.Důležité
Pokud máte dlouhotrvající skript, který vyžaduje řádné ukončení v případě, že se hostitel funkce vypne, uveďte token zrušení, který je nutný, s vaším protokolovacím nástrojem funkce.
Další informace najdete v následujících částech:
Následující příklad ukazuje kartu Parametry akce s kódem ukázkového skriptu:
Následující příklad ukazuje vzorový kód skriptu:
/// Add the required libraries. #r "Newtonsoft.Json" #r "Microsoft.Azure.Workflows.Scripting" using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Microsoft.Extensions.Logging; using Microsoft.Azure.Workflows.Scripting; using Newtonsoft.Json.Linq; /// <summary> /// Executes the inline C# code. /// </summary> /// <param name="context">The workflow context.</param> /// <remarks> The entry-point to your code. The function signature should remain unchanged.</remarks> public static async Task<Results> Run(WorkflowContext context, ILogger log) { var triggerOutputs = (await context.GetTriggerResults().ConfigureAwait(false)).Outputs; /// Dereferences the 'name' property from the trigger payload. var name = triggerOutputs?["body"]?["name"]?.ToString(); /// To get the outputs from a preceding action, you can uncomment and repurpose the following code. // var actionOutputs = (await context.GetActionResults("<action-name>").ConfigureAwait(false)).Outputs; /// The following logs appear in the Application Insights traces table. // log.LogInformation("Outputting results."); // var name = null; return new Results { Message = !string.IsNullOrEmpty(name) ? $"Hello {name} from CSharp action" : "Hello from CSharp action." }; } public class Results { public string Message {get; set;} }
Další informace naleznete v tématu "#r" – odkazování na externí sestavení.
Po dokončení uložte pracovní postup.
Po spuštění pracovního postupu můžete zkontrolovat výstup pracovního postupu v Application Insights, pokud je povolený. Další informace najdete v tématu Zobrazení protokolů v Application Insights.
Import oborů názvů
Pokud chcete importovat obory názvů, proveďte to s klauzulí using
jako obvykle. Následující seznam obsahuje automaticky importované obory názvů, takže jsou volitelné, abyste je mohli zahrnout do skriptu:
System
System.Collections.Generic
System.IO
System.Linq
System.Net.Http
System.Threading.Tasks
Microsoft.Azure.WebJobs
Microsoft.Azure.WebJobs.Host
Přidání odkazů na externí sestavení
Pokud chcete odkazovat na sestavení rozhraní .NET Framework, použijte direktivu #r "<assembly-name>
, například:
/// Add the required libraries.
#r "Newtonsoft.Json"
#r "Microsoft.Azure.Workflows.Scripting"
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Logging;
using Microsoft.Azure.Workflows.Scripting;
using Newtonsoft.Json.Linq;
public static async Task<Results> Run(WorkflowContext context)
{
<...>
}
public class Results
{
<...>
}
Následující seznam obsahuje sestavení automaticky přidaná hostitelským prostředím Azure Functions:
mscorlib
System
System.Core
System.Xml
System.Net.Http
Microsoft.Azure.WebJobs
Microsoft.Azure.WebJobs.Host
Microsoft.Azure.WebJobs.Extensions
System.Web.Http
System.Net.Http.Formatting
Newtonsoft.Json
Výstup protokolu do datového proudu
Do metody zahrňte Run
parametr s typem ILogger
a log
jako název, například:
public static void Run(WorkflowContext context, ILogger log)
{
log.LogInformation($"C# script successfully executed.");
}
Výstup protokolu do Application Insights
Pokud chcete vytvořit vlastní metriky v Application Insights, použijte metodu LogMetric
rozšíření na .ILogger
Následující příklad ukazuje volání ukázkové metody:
logger.LogMetric("TestMetric", 1234);
Přístup k triggerům pracovního postupu a výstupům akcí ve skriptu
Pokud chcete získat přístup k datům z pracovního postupu, použijte následující metody dostupné pro WorkflowContext
objekt kontextu:
GetTriggerResults
metodaChcete-li získat přístup k výstupům triggeru, použijte tuto metodu k vrácení objektu, který představuje trigger a jeho výstupy, které jsou k dispozici prostřednictvím
Outputs
vlastnosti. Tento objekt má typ JObject a můžete použít hranaté závorky ([]) jako indexer pro přístup k různým vlastnostem ve výstupech triggeru.Následující příklad získá data z
body
vlastnosti ve výstupech triggeru:public static async Task<Results> Run(WorkflowContext context, ILogger log) { var triggerOutputs = (await context.GetTriggerResults().ConfigureAwait(false)).Outputs; var body = triggerOutputs["body"]; return new Results; } public class Results { <...> }
GetActionResults
metodaChcete-li získat přístup k výstupům akce, použijte tuto metodu k vrácení objektu, který představuje akci a její výstupy, které jsou k dispozici prostřednictvím
Outputs
vlastnosti. Tato metoda přijímá název akce jako parametr. Následující příklad získá data zbody
vlastnosti ve výstupech z akce s názvem action-name:public static async Task<Results> Run(WorkflowContext context, ILogger log) { var actionOutputs = (await context.GetActionResults("action-name").ConfigureAwait(false)).Outputs; var body = actionOutputs["body"]; return new Results; } public class Results { <...> }
Přístup k proměnným prostředí nebo hodnotě nastavení aplikace
Pokud chcete získat proměnnou prostředí nebo hodnotu nastavení aplikace, použijte metodu System.Environment.GetEnvironmentVariable
, například:
public static void Run(WorkflowContext context, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}
public static string GetEnvironmentVariable(string name)
{
return name + ": " +
System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}
Vrácení dat do pracovního postupu
Pro tuto úlohu implementujte metodu Run
s návratovým typem a return
příkazem. Pokud chcete asynchronní verzi, implementujte metodu Run
s atributem Task<return-type>
a klíčovým slovem async
. Návratová hodnota je nastavena na výstupní body
vlastnost akce skriptu, na kterou pak mohou odkazovat všechny následné akce pracovního postupu.
Následující příklad ukazuje metodu Run
s atributem Task<Results>
, async
klíčovým slovem a příkazem return
:
public static async Task<Results> Run(WorkflowContext context, ILogger log)
{
return new Results
{
Message = !string.IsNullOrEmpty(name) ? $"Returning results with status message."
};
}
public class Results
{
public string Message {get; set;}
}
Zobrazení souboru skriptu
Na webu Azure Portal otevřete prostředek aplikace logiky Standard, který má požadovaný pracovní postup.
V nabídce prostředků aplikace logiky v části Vývojové nástroje vyberte Rozšířené nástroje.
Na stránce Rozšířené nástroje vyberte Přejít, čímž otevřete konzolu KuduPlus.
Otevřete nabídku konzoly Ladění a vyberte CMD.
Přejděte do kořenového umístění aplikace logiky: web/wwwroot
Přejděte do složky pracovního postupu, která obsahuje soubor .csx, podél této cesty: site/wwwroot/{workflow-name}
Vedle názvu souboru vyberte Upravit , abyste soubor otevřeli a zobrazili.
Zobrazení protokolů v Application Insights
Na webu Azure Portal v nabídce prostředků aplikace logiky v části Nastavení vyberte Application Insights a pak vyberte aplikaci logiky.
V nabídce Application Insights v části Monitorování vyberte Protokoly.
Vytvořte dotaz pro vyhledání trasování nebo chyb při provádění pracovního postupu, například:
union traces, errors | project TIMESTAMP, message
Chyby kompilace
V této verzi webový editor zahrnuje omezenou podporu Technologie IntelliSense, která se stále vylepšuje. Všechny chyby kompilace se zjistí při uložení pracovního postupu a modul runtime Azure Logic Apps zkompiluje váš skript. Tyto chyby se zobrazí v protokolech chyb vaší aplikace logiky.
Chyby za běhu
Pokud při spuštění skriptu dojde k chybě, Azure Logic Apps provede tyto kroky:
- Předá chybu zpět do pracovního postupu.
- Označí akci skriptu jako neúspěšnou.
- Poskytuje objekt chyby, který představuje výjimku vyvolanou z vašeho skriptu.
Následující příklad ukazuje ukázkovou chybu:
Funkce CSharp_MyLogicApp-InvalidAction_execute_csharp_script_code.csx selhala s chybou Akce neexistující v pracovním postupu. při provádění. Ověřte platnost kódu funkce.
Ukázkové skripty
Následující ukázkové skripty provádějí různé úlohy, které můžete provést.
Dekomprese souboru ZIP textovými soubory z akce HTTP do pole řetězců
// Add the required libraries.
#r "Newtonsoft.Json"
#r "Microsoft.Azure.Workflows.Scripting"
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Azure.Workflows.Scripting;
using System;
using System.IO;
using System.IO.Compression;
using System.Text;
using System.Collections.Generic;
/// <summary>
/// Executes the inline C# code.
/// </summary>
/// <param name="context">The workflow context.</param>
public static async Task<List<string>> Run(WorkflowContext context)
{
var outputs = (await context.GetActionResults("HTTP_1").ConfigureAwait(false)).Outputs;
var base64zipFileContent = outputs["body"]["$content"].ToString();
// Decode base64 to bytes.
byte[] zipBytes = Convert.FromBase64String(base64zipFileContent);
List<string> fileContents = new List<string>();
// Creates an in-memory stream from the zip bytes.
using (MemoryStream zipStream = new MemoryStream(zipBytes))
{
// Extracts files from the zip archive.
using (ZipArchive zipArchive = new ZipArchive(zipStream))
{
foreach (ZipArchiveEntry entry in zipArchive.Entries)
{
// Read each file's content.
using (StreamReader reader = new StreamReader(entry.Open()))
{
string fileContent = reader.ReadToEnd();
fileContents.Add(fileContent);
}
}
}
}
return fileContents;
}
Šifrování dat pomocí klíče z nastavení aplikace
// Add the required libraries.
#r "Newtonsoft.Json"
#r "Microsoft.Azure.Workflows.Scripting"
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Azure.Workflows.Scripting;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
/// <summary>
/// Executes the inline csharp code.
/// </summary>
/// <param name="context">The workflow context.</param>
public static async Task<string> Run(WorkflowContext context)
{
var compose = (await context.GetActionResults("compose").ConfigureAwait(false)).Outputs;
var text = compose["sampleData"].ToString();
return EncryptString(text);
}
public static string EncryptString(string plainText)
{
var key = Environment.GetEnvironmentVariable("app-setting-key");
var iv = Environment.GetEnvironmentVariable("app-setting-iv");
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Encoding.UTF8.GetBytes(key);
aesAlg.IV = Encoding.UTF8.GetBytes(iv);
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
}
return Convert.ToBase64String(msEncrypt.ToArray());
}
}
}
WorkflowContext – třída
Představuje kontext pracovního postupu.
Metody
GetActionResult(string actionName)
Získá výsledek z konkrétní akce v pracovním postupu.
Asynchronní verze jako návratový typ používá úlohu<> , například:
Task<WorkflowOperationResult> GetActionResult(string actionName)
Parametry
actionName
: Název akce.
Návraty
Asynchronní verze vrátí Task
objekt, který představuje asynchronní operaci. Výsledek úkolu obsahuje WorkflowOperationResult
objekt. Informace o WorkflowOperationResult vlastnosti objektu, viz WorkflowOperationResult třída.
RunTriggerResult()
Získá výsledek z triggeru v pracovním postupu.
Asynchronní verze jako návratový typ používá úlohu<> , například:
Task<WorkflowOperationResult> RunTriggerResult()
Parametry
Žádná
Návraty
Asynchronní verze vrátí Task
objekt, který představuje asynchronní operaci. Výsledek úkolu obsahuje WorkflowOperationResult
objekt. Informace o WorkflowOperationResult vlastnosti objektu, viz WorkflowOperationResult třída.
WorkflowOperationResult – třída
Představuje výsledek operace pracovního postupu.
Vlastnosti
Name | Typ | Popis |
---|---|---|
Jméno | String | Získá nebo nastaví název operace. |
Vstupy | JToken | Získá nebo nastaví vstupy provádění operace. |
Výstupy | JToken | Získá nebo nastaví výstupy provádění operace. |
Počáteční čas | DateTime? | Získá nebo nastaví čas spuštění operace. |
Koncový čas | DateTime? | Získá nebo nastaví čas ukončení operace. |
OperationTrackingId | String | Získá nebo nastaví ID sledování operace. |
Kód | String | Získá nebo nastaví stavový kód akce. |
Stav | Řetězcové | Získá nebo nastaví stav akce. |
Chyba | JToken | Získá nebo nastaví chybu akce. |
TrackedProperties | JToken | Získá nebo nastaví sledované vlastnosti akce. |