Eventos
Compilación de Intelligent Apps
17 mar, 21 - 21 mar, 10
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahoraEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Este artículo es una introducción a Durable Functions en el trabajo aislado de .NET. El trabajo aislado permite que la aplicación de Durable Functions se ejecute en una versión de .NET diferente a la del host de Azure Functions.
El uso de este modelo le permite obtener todas las grandes ventajas que se incluyen con el proceso de trabajo aislado de Azure Functions .NET. Para más información, consulte Ventajas del modelo de trabajo aislado. Además, este nuevo SDK incluye algunas características nuevas.
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
Requisito: agregar <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" />
al proyecto.
Al agregar el paquete del generador de origen, obtendrá acceso a dos características nuevas:
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);
}
}
[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);
}
}
Las entidades duraderas se admiten en el trabajo aislado de .NET. Consulte la guía del desarrollador.
Esta guía presupone que va a empezar con un proyecto de Durable Functions .NET 2.x.
El primer paso es actualizar el proyecto para Azure Functions .NET aislado. A continuación, actualice las referencias del paquete NuGet Durable Functions.
Antigua:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
Nuevo:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
Durable Functions para el trabajo aislado de .NET es un paquete completamente nuevo con diferentes tipos y espacios de nombres. Como resultado, se requieren cambios en el código, pero muchas de las API se alinean sin necesidad de cambios.
El esquema para el trabajo aislado de Durable Functions .NET y Durable Functions 2.x se ha mantenido igual, no es necesario realizar ningún cambio.
Esta tabla no es una lista exhaustiva de cambios.
2.x | Aislado |
---|---|
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>() o inserte la entrada como parámetro: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
DurableActivityContext |
No equivalente |
DurableActivityContext.GetInput<T>() |
Insertar la entrada como parámetro MyActivity([ActivityTrigger] T input) |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync , incluya el parámetro TaskOptions con detalles de repetición. |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync , incluya el parámetro TaskOptions con detalles de repetición. |
IDurableOrchestrationContext.CallHttpAsync |
TaskOrchestrationContext.CallHttpAsync |
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) |
TaskOrchestrationContext.CreateReplaySafeLogger<T>() o 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 |
Se ha eliminado, se agrega FunctionContext como parámetro de entrada |
IDurableEntityContext.HasState |
TaskEntityOperation.State.HasState |
IDurableEntityContext.BatchSize |
Quitado |
IDurableEntityContext.BatchPosition |
Quitado |
IDurableEntityContext.GetState |
TaskEntityOperation.State.GetState |
IDurableEntityContext.SetState |
TaskEntityOperation.State.SetState |
IDurableEntityContext.DeleteState |
TaskEntityOperation.State.SetState(null) |
IDurableEntityContext.GetInput |
TaskEntityOperation.GetInput |
IDurableEntityContext.Return |
Quitado. Alternativamente, se usa el valor devuelto del método. |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync . Se han quitado los parámetros del constructor. |
IDurableOrchestrationClient.GetStatusAsync |
DurableTaskClient.GetInstanceAsync |
Newtonsoft.Json
a System.Text.Json
. Para más información, consulte esta página.Eventos
Compilación de Intelligent Apps
17 mar, 21 - 21 mar, 10
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahoraCursos
Módulo
Creación de un flujo de trabajo sin servidor de larga duración con Durable Functions - Training
Aprenda a organizar un flujo de trabajo de larga duración como un conjunto de actividades mediante instancias escalables y rentables de Durable Functions.
Documentación
Inicio rápido: Creación de una aplicación de Durable Functions en C#
Cree y publique una aplicación de Durable Functions en C# en Azure Functions mediante Visual Studio o Visual Studio Code.
Enlaces para Durable Functions: Azure
Aprenda a utilizar desencadenadores y enlaces en la extensión Durable Functions para Azure Functions.
Introducción a los paquetes, extensiones y SDK de Durable Functions.
Información general sobre las versiones de Durable Functions: Azure Functions
Obtenga información sobre las versiones de Durable Functions.