Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln är en översikt över Durable Functions i den isolerade .NET-arbetaren. Med den isolerade arbetaren kan din Durable Functions-app köras på en annan .NET-version än Azure Functions-värd.
Varför ska du använda Durable Functions i den isolerade .NET-arbetaren?
Med den här modellen kan du få alla de stora fördelar som följer med Azure Functions .NET-isolerade arbetsprocess. Mer information finns i Fördelar med den isolerade arbetsmodellen. Dessutom innehåller den här nya SDK:n några nya funktioner.
Funktionsförbättringar av Durable Functions i processstadiet
- Orkestreringsdata kan införas direkt: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
- Stöd för starkt skrivna anrop och klassbaserade aktiviteter och orkestreringar (OBS! i förhandsversion. Mer information finns här.)
- Plus alla fördelar med Azure Functions .NET-isolerad arbetare.
Generatorer för källkod och klassbaserade aktiviteter samt orkestreringar
              Krav: lägg till <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" /> i projektet.
Genom att lägga till källgeneratorpaketet får du åtkomst till två nya funktioner:
- Klassbaserade aktiviteter och orkestreringar, ett alternativt sätt att skriva Durable Functions. I stället för "funktionsbaserad" skriver du vältypade klasser som ärver typer från Durable SDK.
- Strikt typade tilläggsmetoder för att anropa underorkestreringar och aktiviteter. Dessa tilläggsmetoder kan också användas från "funktionsbaserade" aktiviteter och orkestreringar.
Funktionsbaserat exempel
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);
    }
}
Klassbaserat exempel
[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);
    }
}
Varaktiga entiteter
Varaktiga entiteter stöds i den isolerade .NET-arbetaren. Mer information finns i utvecklarguiden.
Migreringsguide
Den här processen förutsätter att du börjar med ett .NET Durable Functions 2.x-projekt som körs i process med Functions-värd.
Migrera projektet
Det första steget är att migrera .NET-projektet till den isolerade arbetsprocessen.
Referens för uppdateringspaket
När du har migrerat din app för att använda isolate worker-processen måste du uppdatera Ditt Durable Functions NuGet-paket för att referera till det isolerade arbetarspecifika paketet, som i det här exemplet:
Gammal:
<ItemGroup>
  <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
Ny:
<ItemGroup>
  <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
Uppdatera koden
Durable Functions för .NET-isolerad process är ett helt nytt paket med olika typer och namnrum. Det finns nödvändiga ändringar i koden som ett resultat, men många av API:erna överensstämmer utan ändringar som behövs.
Host.json schema
Schemat för Durable Functions .NET isolerad arbetare och Durable Functions 2.x har förblivit detsamma, inga ändringar ska behövas.
Offentliga API-ändringar
Den här tabellen är inte en fullständig lista över ändringar.
| 2.x | Isolerad | 
|---|---|
| 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>()eller ange indata som en parameter:MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) | 
| DurableActivityContext | Ingen motsvarighet | 
| DurableActivityContext.GetInput<T>() | Ange indata som en parameter MyActivity([ActivityTrigger] T input) | 
| IDurableOrchestrationContext.CallActivityWithRetryAsync | TaskOrchestrationContext.CallActivityAsync, inkluderaTaskOptionsparametern med återförsöksinformation. | 
| IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync | TaskOrchestrationContext.CallSubOrchestratorAsync, inkluderaTaskOptionsparametern med återförsöksinformation. | 
| IDurableOrchestrationContext.CallHttpAsync | TaskOrchestrationContext.CallHttpAsync | 
| IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) | TaskOrchestrationContext.CreateReplaySafeLogger<T>()ellerTaskOrchestrationContext.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 | Borttagen, lägg till FunctionContextsom en indataparameter | 
| IDurableEntityContext.HasState | TaskEntityOperation.State.HasState | 
| IDurableEntityContext.BatchSize | Borttagna | 
| IDurableEntityContext.BatchPosition | Borttagna | 
| IDurableEntityContext.GetState | TaskEntityOperation.State.GetState | 
| IDurableEntityContext.SetState | TaskEntityOperation.State.SetState | 
| IDurableEntityContext.DeleteState | TaskEntityOperation.State.SetState(null) | 
| IDurableEntityContext.GetInput | TaskEntityOperation.GetInput | 
| IDurableEntityContext.Return | Avlägsnad. Metodreturvärde som används i stället. | 
| IDurableEntityContext.SignalEntity | TaskEntityContext.SignalEntity | 
| IDurableEntityContext.StartNewOrchestration | TaskEntityContext.ScheduleNewOrchestration | 
| IDurableEntityContext.DispatchAsync | TaskEntityDispatcher.DispatchAsync. Konstruktorparametrar har tagits bort. | 
| IDurableOrchestrationClient.GetStatusAsync | DurableTaskClient.GetInstanceAsync | 
Förändringar i beteende
- Standardbeteendet för serialisering har ändrats från Newtonsoft.JsontillSystem.Text.Json. Mer information finns här.