【问题标题】:Disable Property of Azure Functions not working in Visual Studio 2017禁用 Azure Functions 的属性在 Visual Studio 2017 中不起作用
【发布时间】:2017-08-18 06:01:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# azure azure-functions timer-trigger


    【解决方案1】:

    禁用属性默认值为true

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

    所以代码看起来像

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

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

    【讨论】:

    • 已将此问题提交给 Azure 函数团队。门户网站也有同样的问题。更多信息:github.com/Azure/azure-functions-ux/issues/1712
    • 各位,Disable() 属性中的参数不是布尔值,而是指可以包含布尔值的应用程序设置。 (有关更多信息和代码 sn-p,请参阅我的答案)
    【解决方案2】:

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

    {
        "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

    【讨论】:

      【解决方案3】:

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

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

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

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

      第一个 sn-p(属性)

      #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
              }
      

      第二个 sn-p (local.appsettings.json)

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

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

      • 仅使用Disable() 不允许您事后对其进行配置/更改
      • 更新 host.json 文件以仅包含您要运行的触发器也有可能使此更改进入生产环境。

      【讨论】:

        【解决方案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

        【讨论】:

          【解决方案5】:

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

          这是我的函数定义。

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

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

          【讨论】:

          • 这是在门户网站上工作。但不适用于本地调试环境。 (Visual Studio 2017)
          • 是的,你是对的。如果您不想运行该功能,可以退出调试。为什么要在调试环境中禁用该功能?
          • 我还在本地环境中测试了 "disabled": true 。它也行不通。它认为我们的本地环境将跳过此属性,因为我们无法在本地环境中随时停止该功能。
          • 我有 40 个函数。我只想测试一个而不运行其他功能。
          • 对于您的方案,您可以注释掉您不想测试的 FunctionName 属性。例如, //[FunctionName("Function1")]
          【解决方案6】:

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

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

              if(ConfigurationManager.AppSettings["AzureWebJobs.TimerTriggeredFunction.Disabled"] == "true") return;
          

          【讨论】:

            猜你喜欢
            • 2018-02-14
            • 1970-01-01
            • 1970-01-01
            • 2018-03-18
            • 1970-01-01
            • 1970-01-01
            • 2017-10-13
            • 2018-08-02
            • 2021-06-21
            相关资源
            最近更新 更多