Azure编排函数报错:UploadDocumentOrchestrator不存在、禁用或非编排函数
解决Azure Durable Orchestrator函数"不存在/非编排函数"的异常
我完全懂这种头疼的感觉——你的UploadDocumentOrchestrator之前好好跑了几十次,突然从statusQueryGetUri返回报错:
Orchestrator function 'UploadDocumentOrchestrator' failed: The function 'UploadDocumentOrchestrator' doesn't exist, is disabled, or is not an orchestrator function.
而且本地func start明明显示函数有效,Http触发器StartUploadDocuments执行成功,但编排函数根本没启动,日志里只有触发器的成功记录,连编排的启动日志都没有。之前还碰到过自动恢复的情况,十有八九是Durable扩展或函数宿主的缓存搞的鬼,给你几个针对性的排查修复步骤:
1. 彻底清除Durable扩展的缓存
Durable Functions的扩展经常会缓存函数元数据,普通重启宿主根本清不掉。按这个步骤来:
- 先停掉本地的函数宿主(按
Ctrl+C就行) - 找到项目根目录下的
.durabletask文件夹,直接删掉(这是Durable的专属缓存目录) - 顺便把
bin和obj目录也删了,重新构建整个项目 - 最后用
func start --verbose启动,盯着启动日志看,确认UploadDocumentOrchestrator被标记为orchestrationTrigger(就像你之前看到的那样)
2. 再核对一遍Orchestrator的绑定配置
虽然VSCode没报错,但有时候绑定属性的小疏漏也会导致这种问题:
- 确认函数用的是正确的编排触发器绑定:C#里是
[OrchestrationTrigger],Node.js里是@durable/orchestrationTrigger - 检查函数签名是否符合要求:比如C#里必须返回
Task或Task<T>,不能加其他非允许的输入输出绑定;Node.js里不能有异步以外的非确定性操作
3. 检查Durable扩展和Runtime版本兼容性
版本不匹配也是玄学问题的高发区:
- 看看你的
extensions.csproj(C#)或者package.json(Node.js)里的Durable扩展版本 - 对比本地Functions Core Tools的版本(用
func --version查看),确保两者兼容(一般保持扩展和工具版本接近就不会出问题)
4. 直接调用Durable API触发测试
如果Http触发器触发后编排没反应,试试绕开触发器,直接调用Durable的Webhook API:
- 发一个POST请求到
http://localhost:7071/runtime/webhooks/durabletask/orchestrators/UploadDocumentOrchestrator,带上你的输入参数 - 看返回的错误信息会不会更具体,有时候能直接定位到缓存或绑定的问题
5. 排查宿主实例的锁租约问题
从你提供的日志里看到Host lock lease acquired by instance ID '0000000000000000000000004906C298',如果之前有残留的宿主实例没彻底关掉,可能会导致编排任务被锁死:
- 打开任务管理器,确认只有一个
func.exe进程在运行 - 如果是部署到Azure上,检查App Service的实例数,有没有异常实例,必要的时候重启整个App Service
之前你碰到的自动恢复情况,本质就是缓存过期自动刷新了,上面的步骤能帮你手动触发这个过程,不用干等几小时。
内容的提问来源于stack exchange,提问作者austin-alta
相关产品推荐
相关产品推荐

