Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
- Benefícios do trabalho isolado para funções duráveis
- Começando com os pacotes necessários
- Principais diferenças das APIs e namespaces em processos
- Geradores de código-fonte e sintaxe baseada em classes (versão prévia) para orquestrações fortemente tipadas
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/IServiceProviderem 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:
Instale o pacote NuGet necessário:
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />Use
TaskOrchestrationContextpara orquestradores eDurableTaskClientpara 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>eTaskActivity<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.