Panoramica delle Durable Functions nel worker isolato .NET

Il worker isolato .NET consente di eseguire le Funzioni Durabili in qualsiasi versione supportata di .NET indipendentemente dal processo host delle Azure Functions. Questo modello offre il controllo completo sull'inserimento delle dipendenze, sul middleware e sul controllo delle versioni di .NET.

In questo articolo vengono fornite informazioni su:

Vantaggi

Il worker isolato di .NET offre diversi vantaggi per le app Durable Functions:

  • Controllo delle versioni indipendenti di .NET: Eseguire l'app in .NET 8, .NET 9 o versione successiva senza attendere l'aggiornamento dell'host di Funzioni.
  • Inserimento completo delle dipendenze: Usare modelli .NET IServiceCollection / IServiceProvider standard nelle attività.
  • Middleware personalizzato: Aggiungere problemi trasversali, ad esempio la registrazione, l'autenticazione o la gestione degli errori tramite la pipeline del middleware del ruolo di lavoro di Funzioni.
  • Inserimento diretto dell'input: L'input di orchestrazione può essere inserito direttamente nella firma del metodo trigger: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input).
  • Chiamate strettamente tipizzate (anteprima): Con il pacchetto del generatore di origine, si ottengono invocazioni sicure in fase di compilazione per attività e sotto-orchestrazioni. Per altre informazioni, vedere Generatori di origine e sintassi basata su classi (anteprima).

Per l'elenco completo dei vantaggi dei lavoratori isolati, vedere Vantaggi del modello di lavoro isolato.

Inizia

Per creare un'applicazione di Durable Functions usando il lavoratore isolato .NET:

  1. Installare il pacchetto NuGet necessario:

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />
    
  2. Usare TaskOrchestrationContext per agenti di orchestrazione e DurableTaskClient per le operazioni client. Per una procedura dettagliata completa, vedere l'esercitazione introduttiva .

Differenze principali rispetto al processo in corso

Se si migra da o si confronta con il modello in-process, ecco le differenze principali:

Area In corso Lavoro isolato .NET
Pacchetto NuGet Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Contesto dell'orchestratore IDurableOrchestrationContext TaskOrchestrationContext
Tipo client IDurableOrchestrationClient DurableTaskClient
Contesto dell'attività IDurableActivityContext TaskActivityContext
spazio dei nomi Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.DurableTask / Microsoft.Azure.Functions.Worker
Logger sicuro per la riproduzione context.CreateReplaySafeLogger(log) context.CreateReplaySafeLogger("Name")

Per una guida completa alla migrazione che illustra la configurazione del progetto, i riferimenti ai pacchetti, i mapping delle API, le differenze comportamentali e i problemi comuni, vedere Eseguire la migrazione da un modello di lavoro in-process a un modello di lavoro isolato.

Generatori di origine e sintassi basata su classi (anteprima)

Il pacchetto del generatore di origine offre un'alternativa a Durable Functions basata su funzioni. Invece di metodi statici con attributi [Function], si scrivono classi fortemente tipizzate che ereditano dal Durable SDK.

Prerequisiti

Aggiungere il pacchetto NuGet del generatore di origine al progetto:

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

Il pacchetto offre due funzionalità:

  • Attività e orchestrazioni basate sulle classi — Classi a rigorosa tipizzazione che ereditano TaskOrchestrator<TInput, TOutput> e TaskActivity<TInput, TOutput>.
  • Metodi di estensione fortemente tipizzati : metodi sicuri a tempo di compilazione per richiamare sotto-orchestrazioni e attività. Questi metodi di estensione funzionano anche nelle orchestrazioni basate su funzioni.

Esempio

L'esempio seguente illustra un'orchestrazione basata su classi che chiama un'attività basata su classi:

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

Per le orchestrazioni o le attività che non richiedono input o output funzionale, usare object? come argomento di tipo generico (ad esempio, TaskOrchestrator<object?, object?>). Questo modello consente di usare l'inserimento delle dipendenze (ad esempio, ILogger<T>) nelle attività mentre si usa ancora il modello basato sulla classe.

Entità durevoli

Le entità durevoli sono supportate nel worker isolato di .NET. Per altre informazioni, vedere la guida per gli sviluppatori.

Passaggi successivi