Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 isolierten Instanz für Durable Functions
- Erste Schritte mit den erforderlichen Paketen
- Wichtige Unterschiede zu prozessinternen APIs und Namespaces
- Quellgeneratoren und klassenbasierte Syntax (Vorschau) für stark typierte Orchestrierungen
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/IServiceProviderin 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:
Installieren Sie das erforderliche NuGet-Paket:
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />Verwenden Sie
TaskOrchestrationContextfür Orchestratoren undDurableTaskClientfü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>undTaskActivity<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.