微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在配置中而不是在编译时设置了Azure函数RunOnStartUp?

如何解决在配置中而不是在编译时设置了Azure函数RunOnStartUp?

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

目前我有

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

我不是真的想将RunonStartup更改为true,但是想知道是否可以在配置中进行设置吗?

是否可以做类似的事情:

RunOnStartup = "%runOnStartUpBool%"并在应用设置中进行设置?

解决方法

有一个很好的SO问题,对此问题here有多个答案。
我的测试环境通常是我的本地环境,所以我更喜欢使用preprocessor directive

    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块是隐藏的。

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

,

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

要运行非HTTP触发的功能(例如在这种情况下,它是计时器触发的),您需要一种向Azure发送请求以运行该功能的方法。用于发出此请求的URL采用特定形式。 enter image description here

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

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

有关详细信息,请参见Manually run a non HTTP-triggered function

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。