Přehled Durable Functions v .NET izolovaném pracovním prostředí

Izolovaný pracovní proces .NET umožňuje spouštět Durable Functions na libovolné podporované verzi .NET nezávisle na hostitelském procesu Azure Functions. Tento model poskytuje úplnou kontrolu nad injektáží závislostí, middlewarem a správou verzí .NET.

V tomto článku se dozvíte o:

Benefits

Izolovaný pracovní proces .NET poskytuje několik výhod pro aplikace Durable Functions:

  • Nezávislá správa verzí .NET: Spusťte aplikaci v .NET 8, .NET 9 nebo novějším bez čekání na aktualizaci hostitele Functions.
  • Úplná injektáž závislostí: Ve svých aktivitách používejte standardní vzory .NET IServiceCollection / IServiceProvider .
  • Vlastní middleware: Přidejte průřezové otázky, jako je protokolování, ověřování nebo zpracování chyb prostřednictvím kanálu pracovního procesu Functions.
  • Přímá injektáž vstupu: Vstup orchestrace může být přímo vložen do definice funkce triggeru: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input).
  • Volání silného typu (Preview): Se zdrojovým balíčkem generátoru získáte vyvolání aktivit a dílčích orchestrací bezpečných v době kompilace. Další informace najdete v tématu Generátory zdrojů a syntaxe založená na třídách (Preview).

Úplný seznam výhod izolovaného pracovního procesu najdete v tématu Výhody izolovaného modelu pracovního procesu.

Začínáme

Jak vytvořit aplikaci Durable Functions pomocí izolovaného pracovního prostředí .NET:

  1. Nainstalujte požadovaný balíček NuGet:

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />
    
  2. Slouží TaskOrchestrationContext k orchestraci a DurableTaskClient pro klientské operace. Kompletní návod najdete v kurzu rychlý start .

Hlavní rozdíly oproti internímu procesu

Pokud migrujete z modelu v procesu nebo jej porovnáváte s modelem v procesu, zde jsou hlavní rozdíly:

Area Zpracovává se Izolovaný pracovník .NET
Balíček NuGet Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Kontext orchestratoru IDurableOrchestrationContext TaskOrchestrationContext
Typ klienta IDurableOrchestrationClient DurableTaskClient
Kontext aktivity IDurableActivityContext TaskActivityContext
Namespace Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.DurableTask / Microsoft.Azure.Functions.Worker
Protokolovací nástroj odolný proti opakování context.CreateReplaySafeLogger(log) context.CreateReplaySafeLogger("Name")

Komplexní průvodce migrací, který se zabývá nastavením projektu, odkazy na balíčky, mapováním rozhraní API, rozdíly chování a běžnými problémy, najdete v tématu Migrace z procesu do izolovaného pracovního modelu.

Generátory zdrojů a syntaxe založené na třídách (Preview)

Balíček zdrojového generátoru poskytuje alternativu k Durable Functions založeným na funkcích. Místo statických metod s [Function] atributy napíšete třídy silného typu, které dědí z Durable SDK.

Předpoklady

Přidejte do projektu balíček NuGet zdrojového generátoru:

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

Balíček nabízí dvě možnosti:

  • Aktivity a orchestrace založené na třídách – silně typované třídy, které dědí TaskOrchestrator<TInput, TOutput> a TaskActivity<TInput, TOutput>.
  • Silně typované metody rozšíření — metody bezpečné při kompilaci pro vyvolání dílčích orchestrací a aktivit. Tyto rozšiřující metody fungují také v rámci orchestrací založených na funkcích.

Příklad

Následující příklad ukazuje orchestraci založenou na třídě, která volá aktivitu založenou na třídě:

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

Pro orchestrace nebo aktivity, které nepotřebují funkční vstup nebo výstup, použijte object? jako argument obecného typu (například TaskOrchestrator<object?, object?>). Tento model umožňuje používat injektáž závislostí (například ILogger<T>) v aktivitách a přitom stále používat model založený na třídách.

Odolné entity

Odolné entity jsou podporovány v izolovaném pracovním procesu .NET. Další informace najdete v příručce pro vývojáře.

Další kroky