Introducción a Durable Functions en el trabajo aislado de .NET

El trabajo aislado de .NET le permite ejecutar Durable Functions en cualquier versión de .NET compatible independientemente del proceso de host de Azure Functions. Este modelo proporciona control total sobre la inserción de dependencias, el middleware y el control de versiones de .NET.

En este artículo, aprenderá lo siguiente:

Ventajas

El trabajador aislado de .NET proporciona varias ventajas para las aplicaciones de Durable Functions.

  • Control de versiones de .NET independiente: Ejecute la aplicación en .NET 8, .NET 9 o posterior sin esperar a que el host de Functions se actualice.
  • Inserción de dependencias completa: Use patrones de .NET IServiceCollection / IServiceProvider estándar en las actividades.
  • Middleware personalizado: Agregue aspectos transversales, como el registro de logs, la autenticación o el manejo de errores a través de la canalización de middleware del trabajador de Functions.
  • Inyección de entrada directa: La entrada de orquestación se puede insertar directamente en la firma del método desencadenador: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input).
  • Llamadas fuertemente tipadas (versión preliminar): Con el paquete de generador de código, obtendrá invocaciones seguras en tiempo de compilación para actividades y sub-orquestaciones. Para obtener más información, consulte Generadores de origen y sintaxis basada en clases (versión preliminar).

Para obtener la lista completa de las ventajas de los trabajadores aislados, consulte Ventajas del modelo de trabajo aislado.

Empieza ahora

Para crear una aplicación de Durable Functions mediante el trabajador aislado de .NET:

  1. Instale el paquete NuGet necesario:

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />
    
  2. Se usa TaskOrchestrationContext para orquestadores y DurableTaskClient para las operaciones de cliente. Consulte el tutorial de inicio rápido para ver un tutorial completo.

Diferencias clave con respecto al proceso en curso

Si va a migrar o comparar con el modelo en ejecución, estas son las principales diferencias:

Area En proceso Trabajo aislado de .NET
Paquete NuGet Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Contexto del orquestador IDurableOrchestrationContext TaskOrchestrationContext
Tipo de cliente IDurableOrchestrationClient DurableTaskClient
Contexto de actividad IDurableActivityContext TaskActivityContext
Namespace Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.DurableTask / Microsoft.Azure.Functions.Worker
Registrador resistente a repeticiones context.CreateReplaySafeLogger(log) context.CreateReplaySafeLogger("Name")

Para obtener una guía de migración completa que abarque la configuración del proyecto, las referencias de paquetes, las asignaciones de API, las diferencias de comportamiento y los problemas comunes, consulte Migración de un modelo de trabajo aislado a un proceso.

Generadores de origen y sintaxis basada en clases (versión preliminar)

El paquete de generador de código proporciona una alternativa a Durable Functions basadas en funciones. En lugar de los métodos estáticos con [Function] atributos, se escriben clases fuertemente tipadas que heredan del SDK de Durable.

Prerrequisitos

Agregue el paquete NuGet del generador de origen al proyecto:

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

El paquete proporciona dos funcionalidades:

  • Actividades y orquestaciones basadas en clases: clases fuertemente tipadas que heredan TaskOrchestrator<TInput, TOutput> y TaskActivity<TInput, TOutput>.
  • Métodos de extensión fuertemente tipados—métodos seguros en tiempo de compilación para invocar suborquestaciones y actividades. Estos métodos de extensión también funcionan desde orquestaciones basadas en funciones.

Example

En el ejemplo siguiente se muestra una orquestación orientada a clases que invoca una actividad también orientada a clases.

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

Tip

Para orquestaciones o actividades que no necesitan entrada o salida funcionales, use object? como argumento de tipo genérico (por ejemplo, TaskOrchestrator<object?, object?>). Este patrón le permite usar la inserción de dependencias (por ejemplo, ILogger<T>) en las actividades mientras sigue usando el modelo basado en clases.

Entidades duraderas

Las entidades duraderas se admiten en el trabajo aislado de .NET. Para obtener más información, consulte la guía del desarrollador.

Pasos siguientes