Visão geral do Durable Functions no trabalho isolado do .NET

O trabalho isolado do .NET permite que você execute o Durable Functions em qualquer versão do .NET com suporte independentemente do processo de host do Azure Functions. Esse modelo oferece controle total sobre injeção de dependência, middleware e controle de versão do .NET.

Neste artigo, você aprenderá sobre:

Benefits

O trabalho isolado do .NET oferece várias vantagens para aplicativos de Funções Duráveis:

  • Controle de versão independente do .NET: Execute seu aplicativo no .NET 8, .NET 9 ou posterior sem esperar que o host do Functions seja atualizado.
  • Injeção de dependência completa: Use padrões padrão do .NET IServiceCollection / IServiceProvider em suas atividades.
  • Middleware personalizado: adicione preocupações transversais, como registro em log, autenticação ou tratamento de erros por meio do pipeline de middleware de trabalho de Funções.
  • Injeção de entrada direta: a entrada de orquestração pode ser injetada diretamente na assinatura do método de gatilho: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input).
  • Chamadas fortemente tipadas (versão prévia): com o pacote do gerador de código, você obtém invocações seguras em tempo de compilação para atividades e sub-orquestrações. Para obter mais informações, consulte Geradores de origem e sintaxe baseada em classe (versão prévia).

Para obter a lista completa de benefícios de trabalho isolados, consulte Benefícios do modelo de trabalho isolado.

Introdução

Para criar um app Durable Functions usando o trabalhador isolado do .NET:

  1. Instale o pacote NuGet necessário:

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />
    
  2. Use TaskOrchestrationContext para orquestradores e DurableTaskClient para operações de cliente. Confira o tutorial de início rápido para obter um passo a passo completo.

Principais diferenças em relação ao processo em andamento

Se você estiver migrando ou comparando com o modelo em execução, aqui estão as principais diferenças:

Area Em andamento Trabalho isolado do .NET
Pacote NuGet Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Contexto do orquestrador IDurableOrchestrationContext TaskOrchestrationContext
Tipo de cliente IDurableOrchestrationClient DurableTaskClient
Contexto de atividade IDurableActivityContext TaskActivityContext
Namespace Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.DurableTask / Microsoft.Azure.Functions.Worker
Logger com segurança de reprodução context.CreateReplaySafeLogger(log) context.CreateReplaySafeLogger("Name")

Para obter um guia de migração abrangente que aborda configuração de projeto, referências de pacote, mapeamentos de API, diferenças comportamentais e problemas comuns, consulte Migrar do modelo de trabalho em processo para isolado.

Geradores de origem e sintaxe baseada em classe (versão prévia)

O pacote do gerador de código-fonte fornece uma alternativa às Durable Functions baseadas em funções. Em vez de métodos estáticos com declarações de atributos [Function], você escreve classes fortemente tipificadas que herdam do SDK Durável.

Pré-requisitos

Adicione o pacote NuGet do gerador de origem ao seu projeto:

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

O pacote fornece dois recursos:

  • Atividades baseadas em classe e orquestrações – classes com tipagem forte que herdam TaskOrchestrator<TInput, TOutput> e TaskActivity<TInput, TOutput>.
  • Métodos de extensão fortemente tipados - métodos seguros em tempo de compilação para invocar sub-orquestrações e atividades. Métodos de extensão também funcionam a partir de orquestrações baseadas em função.

Example

O exemplo a seguir mostra uma orquestração baseada em classe que chama uma atividade baseada em classe:

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}");
    }
}

Dica

Para orquestrações ou atividades que não precisam de entrada ou saída funcional, use object? como o argumento de tipo genérico (por exemplo, TaskOrchestrator<object?, object?>). Esse padrão permite que você use a injeção de dependência (por exemplo, ILogger<T>) em atividades enquanto ainda usa o modelo baseado em classe.

Entidades duráveis

As entidades duráveis têm suporte no trabalho isolado do .NET. Para obter mais informações, consulte o guia do desenvolvedor.

Próximas Etapas