Azure Function Timer Trigger & API management - 手动执行返回 404
Posted
技术标签:
【中文标题】Azure Function Timer Trigger & API management - 手动执行返回 404【英文标题】:Azure Function Timer Trigger & API management - Manual execution returns 404 【发布时间】:2021-08-24 07:42:28 【问题描述】:我有一个函数应用:
定时器触发器触发的几个函数 还有一些由 HTTP 触发器触发。我还为函数应用设置了Azure API 管理服务,其中定义了HTTP 触发 函数的端点。
我正在尝试按照此处https://docs.microsoft.com/en-us/azure/azure-functions/functions-manually-run-non-http 的指南手动触发我的计时器触发功能之一
尽管 URL 和 x-functions-key
看似正确,但我在 Postman 中得到了 404 结果。
功能:
关键:
请求:
我还注意到:
如果我不包含x-functions-key
标头,那么我会得到 401 Unauthorized
结果
如果我包含 不正确 键,则会得到 403 Forbidden
。
会不会和函数应用设置的API管理服务有关?
如何进一步解决此问题?
【问题讨论】:
【参考方案1】:我已经解决了。
原来 Azure Functions 计时器触发器需要六部分 cron 表达式(我只知道the five part style)
没有它,它就不起作用 - 遗憾的是,这在 UI 中不容易被注意到。 通过调查 Application Insights 日志,我意识到:
功能页面显示一切正常:
更改 CRON 格式已修复 404 问题,我开始收到 202 Accepted 响应。
作为补充说明,我必须补充:
即使响应是 202 Accepted,触发也不能正常工作,因为我的函数返回类型是 Task<IActionResult>
,它不被定时器触发函数接受。
同样,只有 ApplicationInsights 表明有任何问题:
“MonkeyUserRandom”函数出错:Microsoft.Azure.WebJobs.Host:错误索引方法“MonkeyUserRandom”。 Microsoft.Azure.WebJobs.Host:无法将参数“$return”绑定到类型 IActionResult&。确保绑定支持参数类型。如果您正在使用绑定扩展(例如 Azure 存储、ServiceBus、计时器等),请确保您已在启动代码中调用了扩展的注册方法(例如 builder.AddAzureStorage()、builder.AddServiceBus( )、builder.AddTimers() 等)。
这是“手动触发非 http 函数不起作用”的额外提示。
【讨论】:
【参考方案2】:我在我身边测试它,它工作正常。请参考以下截图:
请检查您是否请求 https://xxx.azurewebsites.net/admin/functions/TimerTrigger1
而不是 https://xxx.azurewebsites.net/admin/functions/TimerTrigger
。请注意它是“TimerTrigger1”。
我在第一次测试时请求..../TimerTrigger
,因为文档显示我们QueueTrigger
,它响应404。
【讨论】:
你也有 API 管理吗? @Bartosz 我没有在 APIM 中测试它。我会测试它。 谢谢 - 我已经更新了问题,详细说明了我如何发送请求等。这是针对开源项目 (dailycomic.github.io) @Bartosz 它在我的 apim 中也可以正常工作,你的函数和我的函数之间的区别是你的函数是从本地部署的,我直接在门户上创建它。但我也测试了在Visual Studio中创建一个定时器触发功能,然后将它部署到门户,它也可以手动触发。所以很奇怪。 @Bartosz 您的功能在门户网站上的路径似乎很奇怪。我的路径看起来像 this,但你的路径是 this。看来你的功能比我的高一级。以上是关于Azure Function Timer Trigger & API management - 手动执行返回 404的主要内容,如果未能解决你的问题,请参考以下文章
2017西安网络赛 计蒜客 Trig Function 切比雪夫多项式
2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F.Trig Function(论文+组合数)
Azure Durable Function Activity 似乎运行多次且未完成