.NET 7 Durable Function中DurableClient等属性及客户端的等效替代
.NET 7 Durable Functions Worker模式 等效替代方案
客户端([DurableClient] + IDurableOrchestrationClient)
原WebJobs模式下的客户端写法依赖IDurableOrchestrationClient,在Worker模式中替换为IDurableClient,同时调整函数定义的属性和参数类型:
原代码:
[FunctionName("StartOrchestration")] public async Task<IActionResult> Start( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req, [DurableClient] IDurableOrchestrationClient starter) { // 启动编排逻辑 }
Worker模式等效写法:
[Function("StartOrchestration")] public async Task<HttpResponseData> Start( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, [DurableClient] IDurableClient durableClient) { var instanceId = await durableClient.StartNewAsync("MyOrchestration", null); // 后续响应逻辑 }
编排触发器([OrchestrationTrigger] + IDurableOrchestrationContext)
IDurableOrchestrationContext仍可使用,但需确保引用Microsoft.Azure.Functions.Worker.Extensions.DurableTask包中的类型,同时函数属性从FunctionName改为Function:
原代码:
[FunctionName("MyOrchestration")] public async Task<string> RunOrchestrator( [OrchestrationTrigger] IDurableOrchestrationContext context) { // 编排逻辑 }
Worker模式等效写法:
[Function("MyOrchestration")] public async Task<string> RunOrchestrator( [OrchestrationTrigger] IDurableOrchestrationContext context) { var activityResult = await context.CallActivityAsync<string>("MyActivity", "sample input"); return activityResult; }
活动触发器([ActivityTrigger])
ActivityTrigger属性的使用方式基本一致,仅需调整函数属性和命名空间:
原代码:
[FunctionName("MyActivity")] public string RunActivity([ActivityTrigger] string input) { // 活动逻辑 }
Worker模式等效写法:
[Function("MyActivity")] public string RunActivity([ActivityTrigger] string input) { return $"Processed input: {input}"; }
核心注意事项
- 替换NuGet包:移除
Microsoft.Azure.WebJobs.Extensions.DurableTask,安装Microsoft.Azure.Functions.Worker.Extensions.DurableTask(选择适配.NET 7的版本)。 - 依赖注入配置:Worker模式下无需继承
FunctionsStartup,直接在Program.cs的ConfigureServices中注册服务。 - 客户端注入:若需在非函数类中使用Durable客户端,直接通过依赖注入获取
IDurableClient即可,无需依赖WebJobs的解析机制。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

