Lokale Funktionen in Standard-Workflows für Azure Logic Apps erstellen und ausführen

Gilt für: Azure Logic Apps (Standard)

Wenn Ihr Integrationsworkflow Logik über die integrierten Operationen und vorgefertigten Connectors hinaus benötigt, erstellen Sie eine lokale Funktion, bei der der Code spezifisch für Ihre Logik-App-Lösung bleibt. Diese lokale Funktion ist benutzerdefinierter .NET-Code, den Sie im selben Azure Logic Apps Standard-Projekt wie die Workflows des Aufrufers erstellen, ausführen, debuggen und bereitstellen. Indem Sie die Funktion lokal halten, können Sie den Workflow und seinen eigenen Code als eine einzige App entwickeln, sichern, bereitstellen, skalieren und betreiben.

Lokale Funktionen helfen Ihren Arbeitsabläufen bei Aufgaben wie:

  • Implementiere benutzerdefinierte Geschäftslogik und Berechnungen.
  • Proprietäre oder komplexe eingehende Nachrichten analysieren.
  • Validieren, bereichern oder einfache Transformationen von Daten durchführen.
  • Gestalten Sie ausgehende Nachrichten für eine API, einen Connector oder ein Partnersystem.
  • Verwenden Sie geeignete .NET-Hilfslogik aus bestehenden Integrationslösungen, einschließlich BizTalk Server-Migrationsszenarien.

Mit lokalen Funktionen können Sie folgende Ziele erreichen:

Zielsetzung Fähigkeit
Entwickle und debugge eine Lösung Erstellen Sie den Workflow und die lokale Funktion im selben Visual Studio Code-Arbeitsbereich und durchlaufen Sie beide in einer Debugging-Sitzung.
Gemeinsam einsetzen Baue und bereite die lokale Funktion zusammen mit den Workflows des Anrufers ein, ohne einen separaten Serviceplan bereitzustellen.
Verringerung der Dienstgrenzen Vermeiden Sie eine separate Function App, einen HTTP-Endpunkt, einen Authentifizierungsfluss und einen Netzwerkhop für workflowspezifischen Code.
Kombinieren Sie Low-Code- und Pro-Code-Tools Verwenden Sie Connectors und Workflow-Orchestrierung für den Integrationsfluss. Verwenden Sie lokale Funktionen für spezialisierte .NET-Logik.

Eine lokale Funktion unterscheidet sich von einer Funktion, die in einer separaten Funktionsanwendung in Azure Functions gehostet wird. Azure Functions funktioniert am besten, wenn Ihr Code einen unabhängigen Endpunkt offenlegen, über Apps hinweg geteilt werden, einen eigenen Bereitstellungs- und Versionszyklus durchlaufen oder unabhängig skalieren muss. Wenn Ihr Code in einer bestimmten Azure Logic Apps Standard-Lösung funktionieren und den Anwendungslebenszyklus mit den Aufrufer-Workflows teilen muss, verwenden Sie eine lokale Funktion.

Dieser Leitfaden zeigt, wie man lokale .NET-Funktionen für Standard-Workflows erstellt, erstellt, aufruft, debuggt und bereitstellt, indem man Visual Studio Code verwendet.

Hinweis

Lokale Funktionen sind für die folgenden Szenarien nicht geeignet:

  • Ausführen von Prozessen, die 10 Minuten überschreiten können.
  • Verwendung von BizTalk Server-Pipeline-Komponenten, die Streaming implementieren.

Weitere Informationen finden Sie unter "Einschränkungen".

Voraussetzungen

  • Ein Azure Konto und Abonnement. Erhalten Sie ein kostenloses Azure-Konto.

  • Das neueste Visual Studio Code mit der Erweiterung Azure Logic Apps (Standard).

    Voraussetzungen finden Sie unter Create Standard workflows in single-tenant Azure Logic Apps with Visual Studio Code.

    Die Erweiterung bietet die folgenden Funktionen und Vorteile:

    • Erstellen Sie Ihren eigenen Code, indem Sie Funktionen erstellen, die die Flexibilität und Kontrolle haben, um Ihre anspruchsvollsten Integrationsprobleme zu lösen.
    • Debuggen Sie Code lokal in Visual Studio Code. Schrittweises Durchlaufen von Code und Workflows in derselben Debugsitzung.
    • Bereitstellen von Code zusammen mit Workflows. Es sind keine weiteren Dienstpläne erforderlich.
    • Unterstützen Sie BizTalk Server Migrationsszenarien, damit Sie benutzerdefinierte .NET Investitionen von lokal in die Cloud verschieben können.
  • Ein lokaler Ordner, der für Ihr Codeprojekt verwendet werden soll.

Einschränkungen

  • Du kannst lokale Funktionen nur in Visual Studio Code unter Windows erstellen. Diese Funktion unterstützt das .NET Framework und .NET 8 für Standard-Workflows, die im Workflow Service Plan, App Service-Umgebung v3 (ASE v3) oder Hybrid gehostet werden.

  • Sie können das Erstellen benutzerdefinierter Funktionen im Azure-Portal nicht nutzen. Führen Sie die folgenden Schritte aus, um in Ihrem Workflow mit Ausgaben aus benutzerdefinierten Funktionen zu arbeiten:

    1. Nachdem Sie Ihre Funktionen für Azure implementiert haben, führen Sie die Schritte in Rufen Sie Ihren Code aus einem Workflow auf für das Azure-Portal aus.

    2. Fügen Sie die integrierte Aktion namens "Aufrufen einer lokalen Funktion" in dieser Logik-App zu Ihrem Workflow hinzu. Wählen Sie die bereitgestellten benutzerdefinierten Funktionen aus, die Sie benötigen, und führen Sie den Code aus.

    3. Verwenden Sie nachfolgende Aktionen im Workflow, um auf die Ausgaben der benutzerdefinierten Funktion zu verweisen, wie Sie es auch in jedem anderen Workflow tun können. Sie können den Ausführungsverlauf, Eingaben und Ausgaben für die integrierte Aktion anzeigen.

Allgemeine Einschränkungen finden Sie unter Limits und Konfigurationsreferenz für Azure Logic Apps.

1: Erstellen eines Codeprojekts

Die Azure Logic Apps -Erweiterung (Standard) für Visual Studio Code enthält eine Codeprojektvorlage, die eine optimierte Oberfläche zum Schreiben, Debuggen und Bereitstellen Ihres eigenen Codes mit Ihren Workflows bietet. Diese Projektvorlage erstellt eine Arbeitsbereichsdatei und zwei Beispielprojekte: ein Projekt zum Schreiben des Codes und eines anderen Projekts zum Erstellen Ihrer Workflows.

Hinweis

Sie können nicht denselben Projektordner sowohl für Ihren Code als auch für Workflows verwenden.

Führen Sie die folgenden Schritte aus, um ein Codeprojekt zu erstellen:

  1. Melden Sie sich bei Ihrem Azure-Konto in Visual Studio Code an.

    Wenn die Anmeldung länger als üblich dauert, werden Sie von Visual Studio Code aufgefordert, sich über eine Microsoft-Authentifizierungswebsite anzumelden, indem Sie einen Gerätecode angeben. Führen Sie die folgenden Schritte aus, um sich stattdessen mit dem Code anzumelden:

    1. Wählen Sie "Gerätecode verwenden" und dann "Kopieren & Öffnen" aus.

    2. Wählen Sie "Link öffnen" , um ein neues Browserfenster zu öffnen und mit der Authentifizierungswebsite fortzufahren.

    3. Geben Sie auf der Seite Bei Ihrem Konto anmelden Ihren Authentifizierungscode ein, und wählen Sie Weiter aus.

  2. Wählen Sie auf der Aktivitätsleiste das Symbol Azure aus.

  3. Wechseln Sie im Fenster Azure zum Abschnitt Workspace. Bewegen Sie den Mauszeiger über den Titelbereich, sodass die Symbolleiste angezeigt wird.

  4. Wählen Sie im Menü Azure Logic Apps Neue Logik-App-Arbeitsbereich erstellen aus.

    Screenshot, der Visual Studio Code, Azure-Fenster und Workspace-Toolbar-Menü mit ausgewähltem Arbeitsbereich

  5. Navigieren Sie im Fenster "Ordner auswählen " zum lokalen Projektordner, wählen Sie den Ordner und dann "Auswählen" aus.

  6. Geben Sie im Fenster " Neue Logik-App-Arbeitsbereich erstellen" für die Eingabeaufforderung " Arbeitsbereichsname " einen Namen für Ihren Arbeitsbereich ein, und drücken Sie dann die EINGABETASTE.

    In diesem Beispiel wird weather-app als der Arbeitsbereichsname verwendet.

    Screenshot, der die Aufforderung zeigt, einen Arbeitsbereichsnamen einzugeben.

  7. Wählen Sie für die Eingabeaufforderung "Vorlage für das neue Projekt auswählen" die Option "Logik-App" mit benutzerdefiniertem Codeprojekt aus.

    Screenshot, der die Eingabeaufforderung

  8. Wählen Sie für die Eingabeaufforderung Auswahl eines Zielframeworks entweder .NET Framework oder .NET 8 aus.

  9. Folgen Sie den nachfolgenden Anweisungen, um die folgenden Informationen bereitzustellen:

    Prompt Beispielwert
    Name der Logik-App weather-logic-app
    Funktionsname für Ihr .NET-Funktionsprojekt WeatherForecast
    Namespace für Ihr .NET-Funktionenprojekt Contoso.Enterprise
    Wählen Sie eine Vorlage für den ersten Workflow Ihres Projekts aus:

    - Zustandsbehafteter Workflow
    - Zustandsloser Workflow
    - Autonomer Agent
    - Konversationsagent
    - Jetzt überspringen
    Zustandsbehafteter Workflow
    Workflowname weather-workflow
  10. Wählen Sie bei der Aufforderung Auswahl, wie Sie Ihr Projekt öffnen möchten die Option "Im aktuellen Fenster öffnen" aus.

    Nachdem Sie diesen Schritt abgeschlossen haben, erstellt Visual Studio Code Ihren Arbeitsbereich, der ein .NET Funktionen-Projekt und ein Logik-App-Projekt enthält, z. B.:

    Screenshot, der den erstellten Arbeitsbereich mit dem Logic App-Projekt und dem .NET Functions-Projekt zeigt.

    Beachten Sie im Explorer-Fenster die folgenden Ordner in Ihrem Arbeitsbereich:

    Ordner BESCHREIBUNG
    < Arbeitsbereichsname> Enthält sowohl Ihr .NET-Funktionen-Projekt als auch das Logik-App-Workflow-Projekt.
    < Logic-App-Name> Enthält die Dateien und andere Artefakte für Ihr Logik-App-Projekt. Beispielsweise ist die workflow.json Datei die Workflowdefinitionsdatei, in der Sie Ihren Workflow erstellen können.
    < Funktionsname> Enthält die Dateien und andere Artefakte für Ihr .NET Funktionen-Projekt. Beispielsweise ist die Datei <funktionsname>.cs die Codedatei, in der Sie Ihren Code erstellen können.
  11. Wählen Sie für den Prompt Konnektoren für Azure für Logik-Apps zu aktivieren <logic-app-name>Konnektoren aus Azure verwenden aus.

  12. Wählen Sie für die Aufforderung Select subscription das gewünschte Azure Abonnement aus.

  13. Wählen Sie für die Eingabeaufforderung "Ressourcengruppe für neue Ressourcen auswählen" die gewünschte Ressourcengruppe oder "Neue Ressourcengruppe erstellen" aus.

  14. Wählen Sie bei der Aufforderung Auswahl eines Speicherorts für neue Ressourcen die Azure-Region zur Bereitstellung aus.

  15. Wählen Sie für die Select-Authentifizierungsmethode für Azure Connectors den Authentifizierungstyp aus, der für Verbindungen verwendet werden soll, die Authentifizierung benötigen.

    Authentifizierungsart BESCHREIBUNG
    Verwaltete Identität Wählen Sie verwaltete Dienstidentität aus, um die vom System zugewiesene oder vom Benutzer zugewiesene Identität in Ihrer Logik-App-Ressource zu verwenden.

    Standardmäßig verfügen Standardlogik-App-Ressourcen bereits über die vom System zugewiesene Identität. Sie müssen jedoch die Identität mit Rollenzugriff auf die Zielressource sowie alle anderen Anforderungen einrichten.

    Weitere Informationen finden Sie unter Zuweisen des rollenbasierten Zugriffs auf eine verwaltete Identität.
    Verbindungsschlüssel Richten Sie den Zugriff auf die Zielressource mithilfe von Verbindungszeichenfolgen und Zugriffstasten ein.

Nachdem Sie diese Schritte ausgeführt haben, fahren Sie mit dem nächsten Abschnitt fort, damit Sie Ihren Code erstellen können.

2: Schreiben des Codes

  1. Erweitern Sie im Explorer-Fenster den Funktionsprojektordner, und öffnen Sie die <Datei "Funktionsname>.cs ".

    Diese Datei enthält Beispielcode und bestimmte Codeelemente mit Werten, die Sie zuvor angegeben haben.

    In diesem Beispiel enthält die WeatherForecast.cs-Funktionsdatei diese Codeelemente mit Beispielwerten:

    Code-Element Wert
    Namespacename Contoso.Enterprise
    Klassenname WeatherForecast
    Funktionsname WeatherForecast
    Funktionsparameter zipCode, temperatureScale
    Rückgabetyp Task<Weather>
    Komplexer Typ Weather

    Das folgende Beispiel zeigt den vollständigen Beispielcode:

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

    Die Funktionsdefinition enthält eine Run-Standardmethode, die Sie für die ersten Schritte verwenden können. In diesem Beispiel Run-Methode werden einige Funktionen veranschaulicht, die mit dem Feature für benutzerdefinierte Funktionen verfügbar sind, z. B. das Übergeben verschiedener Eingaben und Ausgaben, einschließlich komplexer .NET Typen.

    Die <Datei "Funktionsname>.cs enthält auch die Schnittstelle, die unterstützung für die ILogger Protokollierung von Ereignissen in einer Application Insights-Ressource bietet. Sie können Ablaufverfolgungsinformationen an Application Insights senden und diese Informationen mit den Ablaufverfolgungsinformationen aus Ihren Workflows speichern, z. B.:

    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);
    
        <...>
    
    }
    
  2. Ersetzen Sie den Beispielfunktionscode durch Ihren eigenen Code, und bearbeiten Sie die Standardmethode Run für Ihre spezifischen Szenarien. Alternativ können Sie die Funktion (einschließlich der [FunctionName("<function-name>")] Deklaration) kopieren und dann die Funktion mit einem eindeutigen Namen umbenennen. Sie können dann die umbenannte Funktion gemäß Ihren Anforderungen bearbeiten.

Dieses Beispiel wird mit dem ursprünglichen Beispielcode fortgesetzt, wobei keine Änderungen vorausgesetzt werden.

3: Kompilieren und Erstellen des Codes

Nachdem du deinen Code fertig geschrieben hast, kompiliere ihn, um sicherzustellen, dass keine Build-Fehler vorliegen. Dein .NET Functions-Projekt enthält automatisch Build-Aufgaben, die kompilieren und deinen Code in den Lib\Custom-Ordner in deinem Logic-App-Projekt hinzufügen. Workflows suchen in diesem Ordner nach benutzerdefinierten Funktionen. Je nach .NET-Version werden die Assemblies im Ordner lib\custom\net472 oder lib\custom\net8 abgelegt.

führen Sie die folgenden Schritte aus:

  1. Wählen Sie in Visual Studio Code auf der Aktivitätsleiste Explorer aus.

  2. Öffnen Sie im Explorer-Fenster das Kontextmenü für den Projektordner "Funktionen", und wählen Sie "Projekt für Buildfunktionen" aus.

    Screenshot des Kontextmenüs des Funktionsprojekts mit ausgewählter Option „Funktionsprojekt erstellen“.

    Der Buildvorgang wird für das Funktionsprojekt ausgeführt. Wenn ihr Build erfolgreich ist, zeigt das Terminalfenster eine Meldung "Build erfolgreich " an.

  3. Vergewissern Sie sich, dass die folgenden Elemente in Ihrem Logik-App-Projekt vorhanden sind

    • Erweitern Sie in Ihrem Arbeitsbereich die folgenden Ordner: <your-logic-app>>lib\custom>net472 oder net8, basierend auf Ihrer .NET-Version. Bestätigen Sie, dass der net472 - oder net8-Unterordner die Assemblerdateien (DLL) enthält, die zum Ausführen Ihres Codes erforderlich sind, einschließlich einer Datei namens <Funktionsname>.dll.

    • Erweitern Sie in Ihrem Arbeitsbereich die folgenden Ordner: <Ihre Logik-App>>lib\custom><function-name>. Bestätigen Sie, dass der <Funktionsnamen-Unterordner> eine function.json Datei enthält, die die Metadaten zum von Ihnen geschriebenen Funktionscode enthält. Der Workflow-Designer verwendet diese Datei, um die erforderlichen Eingaben und Ausgaben zu bestimmen, wenn Ihr Code aufgerufen wird.

    Das folgende Beispiel zeigt generierte Assemblys und andere Dateien im Logik-App-Projekt:

    Screenshot, der den Logik-App-Arbeitsbereich mit .NET-Funktionen und Logik-App-Projekten zeigt. Die neu generierten Assemblies und andere erforderliche Dateien sind sichtbar.

4: Aufrufen des Codes aus einem Workflow

Nachdem Sie bestätigt haben, dass Ihr Code kompiliert wird und Ihr Logik-App-Projekt die erforderlichen Dateien enthält, damit Der Code ausgeführt werden kann, richten Sie den Workflow so ein, dass Der Code aufgerufen wird.

  1. Erweitern Sie im Explorer-Fenster den <Arbeitsbereichsnamen>, den <Logik-App-Namen> und dann den <Workflownamen>.

  2. Öffnen Sie das Kontextmenü für workflow.json, und wählen Sie "Designer öffnen" aus.

    Der Workflow-Designer wird geöffnet und zeigt den Standardworkflow mit den folgenden Triggern und Aktionen an:

    Operation BESCHREIBUNG
    Auslöser Der integrierte Anforderungstrigger namens "Wenn eine HTTP-Anforderung empfangen wird".
    Action Die integrierte Aktion namens "Aufrufen einer lokalen Funktion" in dieser Logik-App.
    Action Die integrierte Antwortaktion namens "Antwort ", die Sie verwenden, um dem Aufrufer nur zu antworten, wenn Sie den Anforderungstrigger verwenden.
  3. Wählen Sie im Designer die Aktion namens "Lokale Funktion aufrufen" in dieser Logik-App aus.

    Der Informationsbereich der Aktion wird geöffnet, sodass Sie den aufruf der benutzerdefinierten Funktion einrichten können, z. B.:

    Screenshot, der den Standard-Workflow sowie dessen Trigger und Aktionen im Workflow-Designer zeigt.

  4. Überprüfen und bestätigen Sie, dass der Wert des Funktionsnamenparameters auf die Funktion festgelegt ist, die Sie ausführen möchten. Überprüfen oder ändern Sie alle anderen Parameterwerte, die ihre Funktion verwendet.

5: Debuggen ihres Codes und Workflows

  1. Starten Sie für jeden der folgenden Azure Storage Dienste den Azurite-Speicher-Emulator:

    • Azure Blob-Dienst
    • Azure Warteschlangendienst
    • Azure Tabellendienst
    1. Wählen Sie im Menü Visual Studio Code ViewBefehlspalette aus.

    2. Wählen Sie an der angezeigten Eingabeaufforderung "Azurite: Blob-Dienst starten " aus der Liste aus.

    3. Wählen Sie in der angezeigten Arbeitsverzeichnisliste Ihre Logik-App aus.

    4. Wiederholen Sie diese Schritte für Azurite: Warteschlangendienst starten und Azurite: Tabellendienst starten.

    Wenn Sie erfolgreich sind, zeigt die Visual Studio Code Taskleiste unten auf dem Bildschirm die drei ausgeführten Speicherdienste an.

  2. Fügen Sie den Debugger sowohl Ihrem Logik-App-Projekt als auch Ihrem .NET-Funktionen-Projekt an, indem Sie die folgenden Schritte ausführen:

    1. Wählen Sie in Visual Studio Code auf der Aktivitätsleiste Run and Debug (Tastatur: STRG+UMSCHALT+D) aus.

      Screenshot der Visual Studio Code-Aktivitätsleiste, in dem „Ausführen und Debuggen“ ausgewählt ist.

    2. Wählen Sie in der Liste Ausführen und Debuggen die Option Ausführen/Debuggen Logik-App mit lokaler Funktion (<Ihrer Logik-App>), und dann Start (grüner Pfeil).

      Screenshot der Liste „Run and Debug“ mit Auswahloption zum Ausführen/Debuggen einer Logik-App mit lokaler Funktion.

      Die folgenden Ereignisse treten auf:

      • Das Terminalfenster wird geöffnet und zeigt den gestarteten Debugprozess an.
      • Das Debug-Console-Fenster öffnet sich und zeigt den Debugging-Status an.
      • Am unteren Rand von Visual Studio Code wird die Statusleiste orange, was anzeigt, dass der .NET-Debugger geladen ist.
  3. Um Haltepunkte festzulegen, suchen Sie in Ihrer Funktionsdefinition (<Funktionsname>.cs) oder Workflowdefinition (workflow.json) die Zeilennummer, an der Sie den Haltepunkt wünschen, und wählen Sie die angrenzende Spalte aus, z. B.:

    Screenshot, der die offene Funktionscodedatei mit einem Breakpoint für eine Zeile im Code zeigt.

  4. Um den Anforderungstrigger manuell in Ihrem Workflow auszuführen, öffnen Sie die Seite "Übersicht " des Workflows:

    1. Öffnen Sie im Logik-App-Projekt das Kontextmenü der workflow.json Datei, und wählen Sie dann "Übersicht" aus.

      Auf der Seite Übersicht des Workflows ist die Schaltfläche Trigger ausführen verfügbar, wenn Sie den Workflow manuell starten möchten. Unter Workfloweigenschaften ist der Wert der Rückruf-URL die URL für einen aufrufbaren Endpunkt, der vom Anforderungstrigger in Ihrem Workflow erstellt wird. Sie können Anforderungen an diese URL senden, um Ihren Workflow aus anderen Apps auszulösen, einschließlich anderer Logik-App-Workflows.

    2. Wählen Sie in der Symbolleiste der Seite Übersicht die Option Trigger ausführen aus.

      Screenshot, der die geöffnete Übersichtsseite von Visual Studio Code und dem Workflow zeigt.

      Nachdem der Workflow mit der Ausführung begonnen hat, aktiviert der Debugger Ihren ersten Breakpoint.

    3. Wählen Sie im Menü Ausführen oder in der Symbolleiste des Debuggers eine Debugaktion aus.

    Nach Abschluss der Workflowausführung werden auf der Seite Übersicht die fertige Ausführung und grundlegende Details zu dieser Ausführung angezeigt.

  5. Wählen Sie die beendete Ausführung aus, um weitere Informationen zur Workflowausführung zu überprüfen. Sie können auch in der Liste neben der Spalte Dauer die Option Ausführung anzeigen auswählen.

    Ein Screenshot, der Visual Studio Code und den fertigen Workflow zeigt.

6: Stelle deinen Code bereit

Stellen Sie Ihre benutzerdefinierten Funktionen auf die gleiche Weise bereit, wie Sie Ihr Logik-App-Projekt bereitstellen. Egal, ob Sie von Visual Studio Code aus deployen oder einen CI/CD-DevOps-Prozess verwenden, stellen Sie sicher, dass Sie Ihren Code vor der Bereitstellung erstellen. Stelle außerdem sicher, dass alle abhängigen Assemblies in den folgenden Logik-App-Projektordnern existieren, bevor du deployest:

  • .NET 4.7.2: ordner lib/custom/net472

  • .NET 8: ordner lib/custom/net8

Weitere Informationen finden Sie unter Deploy Standard workflows from Visual Studio Code to Azure.

Abhängigkeitsinjektion

Wenn Sie .NET 8 auswählen, unterstützt benutzerdefinierter .NET Code in Standardworkflows Dependency Injection (DI). Mit dieser Funktion können Sie Dienste einmal registrieren, wodurch sie automatisch für Ihre benutzerdefinierten Codefunktionen zur Laufzeit zur Verfügung gestellt werden, anstatt Abhängigkeiten innerhalb jeder Funktion zu erstellen.

Hinweis

Nur .NET 8 benutzerdefinierte Codeprojekte in Visual Studio Code unterstützen das Einfügen von Abhängigkeiten.

Ohne Abhängigkeitsinjektion tun benutzerdefinierte Codefunktionen oft Folgendes:

  • Erstellen Sie Dienstinstanzen direkt in der Funktion.
  • Doppelte Logik über mehrere Funktionen oder Workflows hinweg.
  • Kombinieren Sie Geschäftslogik mit Setup- und Konfigurationscode.

Wenn Workflows wachsen, wird benutzerdefinierter Code schwieriger zu testen, wiederzuverwenden und zu verwalten. Durch die Abhängigkeitsinjektion können Sie:

  • Trennen Sie geschäftslogik von der Workflowausführung.
  • Gemeinsame Dienste in mehreren benutzerdefinierten Codefunktionen wiederverwenden.
  • Richten Sie benutzerdefinierten Code an Standard-.NET Entwicklungsmustern aus.

Benutzerdefinierter Code wird in Produktionsworkflows besser verwaltbar, insbesondere wenn mehrere Workflows auf dieselbe Logik angewiesen sind.

Wann die Abhängigkeitsinjektion verwendet werden sollte

Wenn Sie über einfache oder einmalige benutzerdefinierte Codefunktionen verfügen, benötigen Sie wahrscheinlich keine Abhängigkeitseinfügung. Wenn Ihr benutzerdefinierter Code jedoch folgende Anforderungen hat, sollten Sie die Abhängigkeitsinjektion in Betracht ziehen:

  • Mehrere Workflows verwenden dieselben benutzerdefinierten Code-Funktionen.
  • Ihre benutzerdefinierten Codefunktionen enthalten Geschäfts- oder Routinglogik, die sich im Laufe der Zeit ändert.
  • Sie benötigen eine bessere Testbarkeit oder langfristige Wartung.

Auswirkungen der Abhängigkeitsinjektion auf benutzerdefinierte .NET-Funktionen

Die Abhängigkeitseinfügung ändert nicht, wie Sie benutzerdefinierte .NET-Funktionen oder ihr Workflowverhalten aufrufen. Diese Funktion ändert nur die zugrunde liegende benutzerdefinierte Codestruktur, erzeugt jedoch dasselbe Ergebnis. Die folgenden Schritte beschreiben diesen Prozess:

  1. Azure Logic Apps lädt Ihr benutzerdefiniertes Codeprojekt.
  2. Azure Logic Apps instanziiert, registriert und fügt die erforderlichen Dienste in die Funktion ein.
  3. Die Funktion wird mit den eingefügten Abhängigkeiten ausgeführt.

Aktivieren der Abhängigkeitsinjektion

Um die Abhängigkeitseinfügung mit Ihrem benutzerdefinierten .NET Code zu verwenden, führen Sie die folgenden Anforderungen aus:

  1. Wenn Sie Ihr benutzerdefiniertes Codeprojekt erstellen, wählen Sie .NET 8 aus.

    Nur .NET 8 benutzerdefinierte Codeprojekte unterstützen das Einfügen von Abhängigkeiten.

  2. Fügen Sie in Ihrem Projekt eine StartupConfiguration Klasse hinzu, um die Liste der Abhängigkeiten zu definieren. Implementieren Sie die IConfigureStartup Schnittstelle, und registrieren Sie Ihre Abhängigkeiten mithilfe von IServiceCollection, z. B.:

    using Microsoft.Azure.Functions.Extensions.Workflows;
    using Microsoft.Extensions.DependencyInjection;
    
    public class StartupConfiguration : IConfigureStartup
    {
        /// <summary>
        /// Configures services for the custom code function to use.
        /// </summary>
        /// <param name="services">The service collection to configure.</param>
        public void Configure(IServiceCollection services)
        {
            // Register the routing service with dependency injection
            services.AddSingleton<IRoutingService, OrderRoutingService>();
            services.AddSingleton<IDiscountService, DiscountService>();
        }
    }
    

    Die Microsoft.Azure.Functions.Extensions.Workflows-Schnittstelle ist in IServiceCollection definiert, während Microsoft.Extensions.DependencyInjection in IConfigureStartup definiert ist. Für weitere Informationen siehe StartupConfiguration.cs.

  3. Initialisieren Sie in Ihrem benutzerdefinierten Codefunktionsklassenkonstruktor die registrierten Dienste, indem Sie sie als Konstruktorparameter definieren, anstatt sie innerhalb der Funktion zu erstellen, z. B.:

    public class MySampleFunction
    {
        private readonly ILogger<MySampleFunction> logger;
        private readonly IRoutingService routingService;
        private readonly IDiscountService discountService;
    
        public MySampleFunction(ILoggerFactory loggerFactory, IRoutingService routingService, IDiscountService discountService)
        {
            this.logger = loggerFactory.CreateLogger<MySampleFunction>();
            this.routingService = routingService;
            this.discountService = discountService;
        }
    
        // Add your function logic here
    
    } 
    

Über das Erstellen und Bereitstellen Ihres benutzerdefinierten Codeprojekts hinaus müssen Sie keine anderen Schritte ausführen, Ihren Workflow bearbeiten oder andere Setupänderungen in Azure Logic Apps vornehmen, um die Abhängigkeitseinfügung zu aktivieren.

Weitere Informationen finden Sie im Beispiel für die benutzerdefinierte Codeabhängigkeitsinjektion.

Bringen Sie Ihre eigenen NuGet-Pakete zu Custom-Code-Projekten mit

Bei NuGet-basierten benutzerdefinierten Codeprojekten, die .NET 8 verwenden, können Sie eigene NuGet-Pakete einschließen und verwalten, ohne Konflikte mit Abhängigkeiten lösen zu müssen, die vom Language Worker Host verwendet werden. Fügen Sie einfach direkt die Assembly-Abhängigkeiten zu dem separaten Speicherort für Assemblies in Ihrem Projekt hinzu. Mit den folgenden Ausnahmen können Sie alle .NET 8 kompatiblen abhängigen Assemblyversionen mitbringen, die Ihr Projekt benötigt:

  • Microsoft.Extensions.Logging.Abstractions
  • Microsoft.Extensions.DependencyInjection.Abstractions
  • Microsoft.Azure.Functions.Extensions.Workflows.Abstractions

Behandeln von Problemen

Fehler im Bereich „Aktionsinformationen“

Wenn Sie im Workflow-Designer die integrierte Aktion namens Lokale Funktion in dieser Logik-App aufrufen auswählen, wird im Informationsbereich der Aktion die folgende Meldung angezeigt:

Failed to retrieve dynamic inputs. Error details:

Überprüfen Sie in diesem Szenario Ihr Logik-App-Projekt, um festzustellen, ob der Ordner LogicApp\lib\custom leer ist. Wenn sie leer ist, wählen Sie im Menü „Terminal“ die Option „Aufgabe ausführen>Funktionen bauen“ aus.

Derzeit wird kein Prozess mit dem angegebenen Namen ausgeführt.

Wenn beim Ausführen des Workflows diese Fehlermeldung angezeigt wird, haben Sie wahrscheinlich den Debuggerprozess an .NET Funktionen und nicht an die Logik-App angefügt.

Um dieses Problem zu beheben, wählen Sie in der Liste Ausführen und Debuggen die Option An Logik-App anfügen (LogicApp) aus, und wählen Sie dann Wiedergeben (grünes Dreieck) aus.

Paket nicht ordnungsgemäß importiert

Wenn im Ausgabefenster ein Fehler angezeigt wird, der der folgenden Meldung ähnelt, stellen Sie sicher, dass mindestens .NET 6.0 installiert ist. Wenn Sie diese Version installiert haben, versuchen Sie, sie zu deinstallieren und dann erneut zu installieren.

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]

Build-Fehler mit Fehlern CS1031 und CS1001

Wenn Ihre Funktion keine Variablen enthält und Sie Ihren Code erstellen, zeigt das Ausgabefenster möglicherweise die folgenden Fehlermeldungen an:

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)

Um dieses Problem zu beheben, fügen Sie in der Methode Des Codes Run den folgenden Parameter hinzu:

string parameter1 = null

Das folgende Beispiel zeigt, wie die Run-Methodensignatur angezeigt wird:

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

Erstellen von Standardlogik-App-Workflows mit Visual Studio Code