Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文概述 .NET 隔离辅助角色中的 Durable Functions 功能。 独立辅助角色允许Durable Functions应用在与Azure Functions主机不同的.NET版本上运行。
为什么在.NET隔离工作进程中使用Durable Functions?
使用此模型可以获得Azure Functions .NET隔离工作进程带来的所有好处。 有关更多信息,请参阅孤立工作者模型的优点。 此外,此新 SDK 包括一些新的功能。
针对进程内 Durable Functions 的功能改进
- 可以直接注入业务流程输入:
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) - 支持强类型调用和基于类的活动和编排(注意:预览状态。有关详细信息,请参阅 源生成器和基于类的活动和编排。)
- 此外,还可享受 Azure Functions .NET 隔离工作者的所有优点。
源生成器和基于类的活动和业务流程
Requirement:向项目添加 <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0" />。
通过添加源生成器包,可以访问两个新功能:
- 基于类的活动和编排,这是编写耐用函数 (Durable Functions) 的替代方法。 你将编写强类型类,而不是“基于函数”,这些类继承 Durable SDK 的类型。
- 用于调用子业务流程和活动的强类型扩展方法。 还可以从“基于函数”的活动和业务流程使用这些扩展方法。
基于函数的示例
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);
}
}
基于类的示例(带有输入/输出)
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}");
}
}
基于类的示例(在活动中没有输入/输出,ILogger)
using Microsoft.DurableTask;
using Microsoft.Extensions.Logging;
[DurableTask]
public class MaintenanceOrchestration : TaskOrchestrator<object?, object?>
{
public override async Task<object?> RunAsync(TaskOrchestrationContext context, object? input)
{
await context.CallActivityAsync(nameof(WriteHeartbeatLogActivity), (object?)null);
return null;
}
}
[DurableTask]
public class WriteHeartbeatLogActivity : TaskActivity<object?, object?>
{
private readonly ILogger<WriteHeartbeatLogActivity> _logger;
public WriteHeartbeatLogActivity(ILogger<WriteHeartbeatLogActivity> logger)
{
_logger = logger;
}
public override Task<object?> RunAsync(TaskActivityContext context, object? input)
{
_logger.LogInformation("Heartbeat logged at {Timestamp}.", DateTimeOffset.UtcNow);
return Task.FromResult<object?>(null);
}
}
使用 object? 作为不需要功能输入或输出的基于类的业务流程和活动的泛型类型参数。 此模式允许你在活动中使用依赖项注入(例如), ILogger<T>同时仍使用基于类的模型。
持久实体
.NET隔离进程支持可持久化实体。 有关详细信息,请参阅 开发人员指南。
迁移指南
若要将Durable Functions应用从进程内模型迁移到.NET隔离辅助角色,请参阅从进程内模型迁移到独立辅助角色模型。 本指南介绍项目设置、包引用、命名空间更改、API 映射、行为差异和常见迁移问题。