You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

隔离进程模式下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:03:12