Overzicht van Durable Functions in de geïsoleerde .NET-werkrol

Dit artikel is een overzicht van Durable Functions in de geïsoleerde .NET-werkrol. Met de geïsoleerde werkrol kan uw Durable Functions-app worden uitgevoerd op een .NET-versie die verschilt van die van de Azure Functions-host.

Waarom Durable Functions gebruiken in de geïsoleerde .NET-werkrol?

Met dit model kunt u alle grote voordelen krijgen die worden geleverd met het geïsoleerde werkproces van Azure Functions .NET. Zie Voordelen van het geïsoleerde werkrolmodel voor meer informatie. Daarnaast bevat deze nieuwe SDK enkele nieuwe functies.

Functieverbeteringen ten opzichte van in-process Durable Functions

  • Indelingsinvoer kan rechtstreeks worden geïnjecteerd: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
  • Ondersteuning voor sterk getypte oproepen en klasgerelateerde activiteiten en indelingen (OPMERKING: in preview. Zie hier voor meer informatie.)
  • Plus alle voordelen van de geïsoleerde .NET-werkrol van Azure Functions.

Brongenerator en op klassen gebaseerde activiteiten en indelingen

Vereiste: toevoegen <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" /> aan uw project.

Door het brongeneratorpakket toe te voegen, krijgt u toegang tot twee nieuwe functies:

  • Op klassen gebaseerde activiteiten en indelingen, een alternatieve manier om Durable Functions te schrijven. In plaats van 'functiegebaseerd' schrijft u sterk getypte klassen, die typen overnemen van de Durable SDK.
  • Sterk getypte uitbreidingsmethoden voor het aanroepen van subindelingen en activiteiten. Deze uitbreidingsmethoden kunnen ook worden gebruikt vanuit op functies gebaseerde activiteiten en indelingen.

Voorbeeld op basis van een functie

public static class MyFunctions
{
    [Function(nameof(MyActivity))] 
    public static async Task<string> MyActivity([ActivityTrigger] string input)
    {
        // implementation
    }

    [Function(nameof(MyOrchestration))] 
    public static async Task<string> MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, string input)
    {
        // implementation
        return await context.CallActivityAsync(nameof(MyActivity), input);
    }
}

Voorbeeld op basis van klasse

[DurableTask(nameof(MyActivity))]
public class MyActivity : TaskActivity<string, string>
{
    private readonly ILogger logger;

    public MyActivity(ILogger<MyActivity> logger) // activites have access to DI.
    {
        this.logger = logger;
    }

    public async override Task<string> RunAsync(TaskActivityContext context, string input)
    {
        // implementation
    }
}

[DurableTask(nameof(MyOrchestration))]
public class MyOrchestration : TaskOrchestrator<string, string>
{
    public async override Task<string> RunAsync(TaskOrchestrationContext context, string input)
    {
        ILogger logger = context.CreateReplaySafeLogger<MyOrchestration>(); // orchestrations do NOT have access to DI.

        // An extension method was generated for directly invoking "MyActivity".
        return await context.CallMyActivityAsync(input);
    }
}

Duurzame entiteiten

Duurzame entiteiten worden ondersteund in de geïsoleerde .NET-werkrol. Raadpleeg de handleiding voor ontwikkelaars.

Migratiehandleiding

In deze handleiding wordt ervan uitgegaan dat u begint met een .NET Durable Functions 2.x-project.

Uw project bijwerken

De eerste stap is het bijwerken van uw project naar Azure Functions .NET geïsoleerd. Werk vervolgens uw Durable Functions NuGet-pakketverwijzingen bij.

Oude:

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>

Nieuw:

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>

Uw code bijwerken

Durable Functions voor .NET geïsoleerde werkrol is een volledig nieuw pakket met verschillende typen en naamruimten. Als gevolg hiervan zijn er vereiste wijzigingen in uw code, maar veel van de API's zijn opgesteld zonder dat er wijzigingen nodig zijn.

Host.json-schema

Het schema voor Durable Functions .NET geïsoleerde werkrol en Durable Functions 2.x is ongewijzigd gebleven. Er zijn geen wijzigingen nodig.

Wijzigingen in openbare API

Deze tabel is geen volledige lijst met wijzigingen.

2.x Geïsoleerd
IDurableOrchestrationClient DurableTaskClient
IDurableOrchestrationClient.StartNewAsync DurableTaskClient.ScheduleNewOrchestrationInstanceAsync
IDurableEntityClient.SignalEntityAsync DurableTaskClient.Entities.SignalEntityAsync
IDurableEntityClient.ReadEntityStateAsync DurableTaskClient.Entities.GetEntityAsync
IDurableEntityClient.ListEntitiesAsync DurableTaskClient.Entities.GetAllEntitiesAsync
IDurableEntityClient.CleanEntityStorageAsync DurableTaskClient.Entities.CleanEntityStorageAsync
IDurableOrchestrationContext TaskOrchestrationContext
IDurableOrchestrationContext.GetInput<T>() TaskOrchestrationContext.GetInput<T>() of injecteer invoer als parameter: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
DurableActivityContext Geen equivalent
DurableActivityContext.GetInput<T>() Invoer als parameter injecteren MyActivity([ActivityTrigger] T input)
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync, parameter met details voor opnieuw proberen op te nemen TaskOptions .
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync, parameter met details voor opnieuw proberen op te nemen TaskOptions .
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() of TaskOrchestrationContext.CreateReplaySafeLogger(string)
IDurableOrchestrationContext.CallEntityAsync TaskOrchestrationContext.Entities.CallEntityAsync
IDurableOrchestrationContext.SignalEntity TaskOrchestrationContext.Entities.SignalEntityAsync
IDurableOrchestrationContext.LockAsync TaskOrchestrationContext.Entities.LockEntitiesAsync
IDurableOrchestrationContext.IsLocked TaskOrchestrationContext.Entities.InCriticalSection
IDurableEntityContext TaskEntityContext.
IDurableEntityContext.EntityName TaskEntityContext.Id.Name
IDurableEntityContext.EntityKey TaskEntityContext.Id.Key
IDurableEntityContext.OperationName TaskEntityOperation.Name
IDurableEntityContext.FunctionBindingContext Verwijderen, toevoegen FunctionContext als invoerparameter
IDurableEntityContext.HasState TaskEntityOperation.State.HasState
IDurableEntityContext.BatchSize Verwijderd
IDurableEntityContext.BatchPosition Verwijderd
IDurableEntityContext.GetState TaskEntityOperation.State.GetState
IDurableEntityContext.SetState TaskEntityOperation.State.SetState
IDurableEntityContext.DeleteState TaskEntityOperation.State.SetState(null)
IDurableEntityContext.GetInput TaskEntityOperation.GetInput
IDurableEntityContext.Return Verwijderd. Methode retourwaarde die in plaats daarvan wordt gebruikt.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Constructorparams verwijderd.

Gedragswijzigingen

  • Het standaardgedrag van serialisatie is gewijzigd in Newtonsoft.JsonSystem.Text.Json. Zie voor meer informatie hier.