隔离进程模式下Azure Durable Functions实例状态获取方案咨询
解决方案
方法一:通过SWA配置暴露内置Durable查询端点
Azure Static Web App可通过修改staticwebapp.config.json代理Durable Functions的内置状态查询端点,无需自定义函数:
- 在SWA根目录创建/修改
staticwebapp.config.json,添加路由规则:
{ "routes": [ { "route": "/runtime/webhooks/durabletask/instances/{*path}", "rewrite": "/api/runtime/webhooks/durabletask/instances/{path}", "allowedRoles": ["anonymous"] // 可根据实际权限需求调整 } ] }
配置完成后,前端即可通过SWA域名直接访问/runtime/webhooks/durabletask/instances/{instanceId},与官方推荐方式一致。
方法二:在隔离进程中编写自定义状态查询函数
若需自定义逻辑封装状态查询,可通过DurableTaskClient的GetInstanceAsync方法获取完整信息,核心是指定IncludeOutput = true以获取输出数据,同时从OrchestrationMetadata中提取错误信息:
代码示例
using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.DurableTask; using Microsoft.DurableTask.Client; namespace YourFunctionNamespace; public class StatusFunctions { [Function("GetStatus")] public async Task<HttpResponseData> GetStatus( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "status/{instanceId}")] HttpRequestData req, [DurableClient] DurableTaskClient client, string instanceId) { var options = new GetInstanceOptions { IncludeOutput = true, IncludeHistory = true // 按需开启,若仅需输出可关闭 }; OrchestrationMetadata instance = await client.GetInstanceAsync(instanceId, options); // 构造包含所需字段的响应对象 var statusResponse = new { InstanceId = instance.InstanceId, RuntimeStatus = instance.RuntimeStatus.ToString(), CreatedAt = instance.CreatedAt, LastUpdatedAt = instance.LastUpdatedAt, Output = instance.Output != null ? System.Text.Json.JsonSerializer.Deserialize<YourOutputType>(instance.Output) : null, ErrorMessage = instance.FailureDetails?.ErrorMessage, FailureReason = instance.FailureDetails?.FailureReason }; HttpResponseData response = req.CreateResponse(System.Net.HttpStatusCode.OK); await response.WriteAsJsonAsync(statusResponse); return response; } }
关键说明
OrchestrationMetadata.Output为JSON字符串,需根据业务输出类型反序列化;FailureDetails属性包含错误详情,对应原DurableOrchestrationStatus的错误相关字段;- 可通过
GetInstanceOptions控制是否包含历史记录、输出等,按需调整以减少数据传输量。
内容的提问来源于stack exchange,提问作者Matt Immer
相关产品推荐
相关产品推荐

