Übersicht über Durable Functions im isolierten .NET-Worker

Mit dem isolierten .NET-Worker können Sie dauerhafte Funktionen auf jeder unterstützten .NET-Version unabhängig vom Azure Functions-Hostprozess ausführen. Dieses Modell bietet Ihnen die vollständige Kontrolle über abhängigkeitsinjektions-, Middleware- und .NET-Versionsverwaltung.

In diesem Artikel lernen Sie Folgendes:

Vorteile

Der isolierte .NET-Worker bietet mehrere Vorteile für Apps mit dauerhaften Funktionen:

  • Unabhängige .NET-Versionsverwaltung: Führen Sie Ihre App auf .NET 8, .NET 9 oder höher aus, ohne darauf zu warten, dass der Funktionshost aktualisiert wird.
  • Vollständige Abhängigkeitsinjektion: Verwenden Sie standardmäßige .NET-Muster IServiceCollection / IServiceProvider in Ihren Aktivitäten.
  • Benutzerdefinierte Middleware: Fügen Sie übergreifende Bedenken wie Protokollierung, Authentifizierung oder Fehlerbehandlung über die Middlewarepipeline "Functions Worker" hinzu.
  • Direkte Eingabeeinfügung: Die Orchestrierungseingabe kann direkt in die Triggermethodensignatur eingefügt werden: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input).
  • Stark typisierte Aufrufe (Vorschau): Mit dem Quellgenerator-Paket erhalten Sie kompilierzeitgesicherte Aufrufe für Aktivitäten und Unterorchestrierungen. Weitere Informationen finden Sie unter Quellgeneratoren und klassenbasierter Syntax (Vorschau).

Eine vollständige Liste der Leistungen isolierter Arbeitnehmer finden Sie unter "Vorteile des isolierten Arbeitsmodells".

Get started

So erstellen Sie eine Durable Functions-App unter Verwendung eines isolierten .NET Workers:

  1. Installieren Sie das erforderliche NuGet-Paket:

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />
    
  2. Verwenden Sie TaskOrchestrationContext für Orchestratoren und DurableTaskClient für Clientvorgänge. Eine vollständige exemplarische Vorgehensweise finden Sie im Schnellstart-Lernprogramm .

Wichtige Unterschiede zu in-process

Wenn Sie vom In-Process-Modell migrieren oder es mit dem In-Process-Modell vergleichen, sind hier die wichtigsten Unterschiede:

Bereich In Bearbeitung .NET Worker im isolierten Umfeld
NuGet-Paket Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Orchestratorkontext IDurableOrchestrationContext TaskOrchestrationContext
Clienttyp IDurableOrchestrationClient DurableTaskClient
Aktivitätskontext IDurableActivityContext TaskActivityContext
Namespace Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.DurableTask / Microsoft.Azure.Functions.Worker
Wiedergabesicherer Logger context.CreateReplaySafeLogger(log) context.CreateReplaySafeLogger("Name")

Einen umfassenden Migrationsleitfaden, der die Projekteinrichtung, Paketverweise, API-Zuordnungen, Verhaltensunterschiede und häufige Probleme abdeckt, finden Sie unter Migrieren von prozessinternem zu isoliertem Arbeitsmodell.

Quellgeneratoren und klassenbasierte Syntax (Vorschau)

Das Quellgeneratorpaket bietet eine Alternative zu funktionsbasierten dauerhaften Funktionen. Statt statische Methoden mit [Function] Attributen zu schreiben, schreiben Sie stark typisierte Klassen, die vom Durable SDK erben.

Voraussetzungen

Fügen Sie das NuGet-Paket "Source Generator" zu Ihrem Projekt hinzu:

<PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0" />

Das Paket bietet zwei Funktionen:

  • Klassenbasierte Aktivitäten und Orchestrierungen – stark typisierte Klassen, die TaskOrchestrator<TInput, TOutput> und TaskActivity<TInput, TOutput> erben.
  • Stark typisierte Erweiterungsmethoden – Methoden mit Kompilierzeit-Sicherheit zum Aufrufen von Sub-Orchestrierungen und -aktivitäten. Diese Erweiterungsmethoden funktionieren auch in funktionbasierten Orchestrierungen.

Example

Das folgende Beispiel zeigt eine klassenbasierte Orchestrierung, die eine klassenbasierte Aktivität aufruft:

using Microsoft.DurableTask;

[DurableTask]
public class MyOrchestration : TaskOrchestrator<string, string>
{
    public override async Task<string> RunAsync(TaskOrchestrationContext context, string input)
    {
        return await context.CallActivityAsync<string>(nameof(MyActivity), input);
    }
}

[DurableTask]
public class MyActivity : TaskActivity<string, string>
{
    public override Task<string> RunAsync(TaskActivityContext context, string input)
    {
        return Task.FromResult($"Processed: {input}");
    }
}

Tip

Verwenden Sie object? für Orchestrierungen oder Aktivitäten, die keine funktionale Eingabe oder Ausgabe benötigen, als generisches Typargument (z. B TaskOrchestrator<object?, object?>. ). Mit diesem Muster können Sie Abhängigkeitsinjektion (z. B. ILogger<T>) in Aktivitäten verwenden, während Sie weiterhin das klassenbasierte Modell verwenden.

Dauerhafte Entitäten

Dauerhafte Entitäten werden im .NET-isolierten Worker unterstützt. Weitere Informationen finden Sie im Entwicklerhandbuch.

Nächste Schritte