1

我有一个 Azure 计时器触发功能,计划在生产中每 3 个月运行一次。但是在测试环境中,我希望它在每次触发时在启动时运行。

目前我有:

[TimerTrigger("%TimerInterval%", RunOnStartup = false)]

我真的不想改变RunonStartuptotrue但想知道是否有办法在配置中设置它?

是否可以执行以下操作:

RunOnStartup = "%RunOnStartUpBool%"并在appsettings中设置?

4

2 回答 2

1

这里有一个很好的 SO question,对同一个问题有多个答案。
我的测试环境通常是我的本地环境,所以我喜欢使用预处理器指令

    public static void Run([TimerTrigger("%TimerInterval%" 

#if DEBUG 
,RunOnStartup=true // When debugging... run the job as soon as we press debug, no need to wait for the timer. 
#endif

    )]TimerInfo myTimer)

    {

说明:在本地开发(调试)期间,该#if DEBUG块被激活。它启用RunOnStartup=true参数。在生产(不是调试)中,该 #if DEBUG块是隐藏的。

不是最漂亮的代码,但比在开发期间必须等待计时器触发间隔要好得多。

于 2020-09-11T23:34:37.803 回答
0

您不能RunOnStartup在运行时从配置/环境变量动态设置。但是您可以通过其他方式解决您的问题,因为您的目的是在启动时(或任何时候)手动触发它。您可以通过一些专门的 http 调用手动触发该功能,如下所述。您可以从测试环境的部署管道作为部署后步骤(或您喜欢的任何其他方式)来做到这一点。

若要运行非 HTTP 触发的函数(如在本例中是计时器触发的),您需要一种向 Azure 发送请求以运行该函数的方法。用于发出此请求的 URL 采用特定形式。 在此处输入图像描述

  • 主机名:函数应用的公共位置,由函数应用的名称加上 azurewebsites.net 或您的自定义域组成。
  • 文件夹路径:要通过 HTTP 请求访问非 HTTP 触发的函数,您必须通过文件夹admin/functions发送请求。
  • 函数名称:要运行的函数的名称。

您可以将此请求位置与函数的“主密钥”一起用作x-functions-key对 Azure 的 POST 请求中的标头以运行该函数。注意Content-Type标题应设置为application/json

有关详细信息,请参阅手动运行非 HTTP 触发的函数

于 2020-09-03T12:17:04.353 回答