Delen via


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

Dit artikel is een overzicht van Durable Functions in de geïsoleerde .NET-worker. 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 worker?

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

  • Orchestratieinvoer 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.

Bron generator en op klassen gebaseerde activiteiten en orkestraties

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 orkestraties, 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 sub-orchestraties 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) // activities 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-worker. Zie de handleiding voor ontwikkelaars voor meer informatie.

Migratiehandleiding

Bij dit proces wordt ervan uitgegaan dat u begint met een .NET Durable Functions 2.x-project dat in het proces wordt uitgevoerd met de Functions-host.

Uw project migreren

De eerste stap is het migreren van uw .NET-project naar het geïsoleerde werkproces.

Bijwerken van pakketverwijzing

Nadat u uw app hebt gemigreerd om het geïsoleerde werkproces te gebruiken, moet u uw Durable Functions NuGet-pakket bijwerken om te verwijzen naar het voor geïsoleerd werkproces specifieke pakket, zoals in dit voorbeeld:

Oud:

<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 worker 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 voeg input toe 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, neem de parameter TaskOptions op inclusief herhalingsdetails.
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync, neem TaskOptions-parameter op met details over opnieuw proberen.
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 retourneert in plaats daarvan een waarde.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Constructorparameters verwijderd.
IDurableOrchestrationClient.GetStatusAsync DurableTaskClient.GetInstanceAsync

Gedragswijzigingen

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