为何Azure Data Factory调用Durable Function返回NotFound及StorageException报错
问题根因定位
你遇到的是三类叠加问题,按优先级排查:
1. 存储权限异常(核心错误)
App Insight中捕获的Microsoft.WindowsAzure.Storage.StorageException: Forbidden是首要根因:Durable Function运行强依赖Azure Storage账户存储编排状态、执行历史等数据,部署到Azure后函数无权限访问关联的存储账户,导致Http Start触发器执行失败,最终返回404给ADF。
常见触发场景:
- 函数应用配置的
AzureWebJobsStorage连接字符串失效,比如存储账户密钥轮换后未更新、使用的SAS令牌已过期 - 存储账户开启了访问防火墙,未放行函数应用的出站IP,也未开启允许可信Azure服务访问的配置
- 存储账户的表/队列/Blob服务关闭了公共访问,且未给函数应用分配对应权限的托管身份
2. ADF调用路径配置错误
你在function.json中配置的Http Start路由为orchestrators/{functionName},对应完整调用路径为https://<你的函数域名>/api/orchestrators/MyOrchestrator,但ADF调用Azure Function的配置规则和你当前的操作不一致:
- 函数名字段只需填Http触发器的名称,也就是
MyHttpStart,不能填编排器名称MyOrchestrator,也不能填带前缀的orchestrators/MyOrchestrator - 编排器名称
MyOrchestrator需要作为路径参数传递给Http Start触发器,你需要在ADF的Function活动配置中新增路径参数functionName,值设为MyOrchestrator
3. 扩展包版本兼容性问题
你的host.json中配置的extensionBundle版本为[1.*, 2.0.0),这个版本内置的Durable Task组件版本较低,和当前Azure Functions运行时存在已知兼容性问题,建议升级到3.x版本:
{ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[3.*, 4.0.0)" } }
修复步骤
- 优先排查存储权限:确认函数应用
AzureWebJobsStorage连接字符串有效性,若存储账户开了防火墙则放行函数IP,或给函数应用分配存储账户的存储Blob数据参与者、存储队列数据参与者、存储表数据参与者角色 - 修改ADF Function活动配置:函数名填
MyHttpStart,添加路径参数functionName = MyOrchestrator - 升级extensionBundle版本后重新部署函数应用
- 验证:先用Postman直接调用
https://<你的函数域名>/api/orchestrators/MyOrchestrator确认返回正常,再回ADF调试即可
内容的提问来源于stack exchange,提问作者Kenny_I
相关产品推荐
相关产品推荐

