Azure Function Timer 触发器和 API 管理 - 手动执行返回 404

Bar*_*osz 5 azure azure-api-management azure-functions

我有一个功能应用程序:

  • 由定时器触发器触发的一些功能
  • 还有一些由HTTP 触发器触发。

我还为函数应用程序设置了Azure API 管理服务,其中HTTP 触发函数定义了其端点。

我正在尝试按照此处的指南手动触发计时器触发功能之一https://learn.microsoft.com/en-us/azure/azure-functions/functions-manually-run-non-http

然而,尽管看似正确的 URL 和x-functions-key.

功能: 在此输入图像描述

钥匙:

在此输入图像描述

请求:

在此输入图像描述

我还注意到:

  • 如果我不包含x-functions-key标题,那么我会得到401 Unauthorized结果
  • 如果我包含了不正确的密钥,那么我会得到403 Forbidden.

是否与为函数应用程序设置的API管理服务有关?

我该如何进一步解决这个问题?

Bar*_*osz 8

我已经设法解决了它。

事实证明,Azure Functions计时器触发器需要六个部分的cron表达式(我只知道五部分的样式

如果没有它,它就无法工作 -遗憾的是,这在 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 功能不起作用”的额外提示。