11

我有带有计时器触发器的 Azure 功能。

public static void Run([TimerTrigger("0 */15 * * * *"), Disable("True")]TimerInfo myTimer, TraceWriter log)

在这里Disable("true")不起作用。它会生成不正确的function.jsonas 。"disabled": "True",它应该是"disabled": True, Disable 只接受字符串值。有什么办法可以改变这个吗?或任何其他方式来禁用功能?

4

6 回答 6

9

禁用属性默认值为true.

使用Disable()而不是Disable("true").

所以代码看起来像

public static void Run([TimerTrigger("0 */15 * * * *"), Disable()]TimerInfo myTimer, TraceWriter log).

如果要启用该功能,请使用Disable("False").

于 2017-08-18T08:48:01.583 回答
6

local.settings.json可以通过以下方式单独禁用功能 2.x

{
    "IsEncrypted": false,
    "Values": {
    "AzureWebJobs.MyFunctionNameOne.Disabled": "true",
    "AzureWebJobs.MyFunctionNameTwo.Disabled": "true",
    ...
    }
}

参考:https ://docs.microsoft.com/en-us/azure/azure-functions/disable-function#functions-2x---all-languages

于 2018-12-05T13:36:22.103 回答
6

我想添加这个答案,因为我也一直在寻找它,并且我相信我找到了一种禁用功能以进行调试/开发的好方法(并避免这些本地更改进入部署管道/源代码控制)。

我将#if DEBUG语句与Disable(string SettingsName)属性结合起来:

以下代码显示了不同的工作:

  • Disable 属性不是使用参数来指示 True 或 False 作为值,而是引用一个 appsetting(您可以将其放入 local.settings.json 文件中)。请参阅本文中的第二个片段。因此,只需更改 appsettings 文件中的设置,我就可以轻松启用和禁用触发器,而不会影响我的 git 存储库或部署管道。
  • 另一个有趣的事情是RunOnStartup = true使用TimerTrigger. 这个(我只使用 DEBUG 编译器指令启用)将允许我立即触发计时器功能,而无需等待下一个 CRON 周期发生。(另一种方法是向您的本地函数端点发布帖子,如this stackoverflow post中所述)。同样,当假设您在 RELEASE 配置中运行生产工作负载时,这只会影响您的本地开发环境,而不是您的开发团队或版本。

第一个片段(属性)

#if DEBUG
        [Disable("disable-transactioncrawler")]
#endif
        [FunctionName("TransactionCrawler")]
        public async Task Run([TimerTrigger("50 */10 * * * *"
#if DEBUG
                , RunOnStartup = true
#endif
            )]TimerInfo myTimer, ILogger log)
        {
                // Logic comes here
        }

第二个片段(local.appsettings.json)

{
  "Values": 
  {
    "disable-transactioncrawler": false
  }
}

以下“解决方案”通常会影响您的生产代码,这可能会导致问题:

  • 仅使用Disable()不允许您事后配置/更改它
  • 更新 host.json 文件以仅包含您要运行的触发器也有可能使此更改到达生产环境。
于 2020-02-14T12:30:25.910 回答
4

您是否尝试过修改解决方案中的host.json?它具有以下属性,您可以指定在运行时加载哪些函数。

// Array of functions to load. Only functions in this list will be enabled.
// If not specified, all functions are enabled.
"functions": ["QueueProcessor", "GitHubWebHook"]

请注意,如果您的解决方案中有多个 Function App 项目,您还需要更改为它们对应的host.json(即每个项目都有自己的 host.json)

文档:https ://github.com/Azure/azure-webjobs-sdk-script/wiki/host.json

于 2017-09-15T02:05:28.263 回答
2

字符串类型的值 - "disabled": "true" 也可以禁用该功能。请看下面的测试结果。

这是我的函数定义。

public static void Run([TimerTrigger("0 */5 * * * *"),Disable("true")]TimerInfo myTimer, TraceWriter log)

这是 Azure 门户上发布的函数。

在此处输入图像描述

于 2017-08-18T06:13:19.040 回答
-1

我尝试使用 local.settings.json 禁用,并且在本地调试时,模拟器窗口实际上说命名函数已禁用,但无论如何都会调用它!这在 VS2017 和 2019 中是相同的。

我目前使用的解决方法是将此应用设置作为我函数的第一行进行测试并立即返回:

    if(ConfigurationManager.AppSettings["AzureWebJobs.TimerTriggeredFunction.Disabled"] == "true") return;
于 2019-09-15T18:19:56.067 回答