Azure WebJobs SDK TimerTrigger 函数未运行

Posted

技术标签:

【中文标题】Azure WebJobs SDK TimerTrigger 函数未运行【英文标题】:Azure WebJobs SDK TimerTrigger Functions not running 【发布时间】:2021-12-05 23:47:07 【问题描述】:

我正在尝试创建一个每 x 秒运行一次函数的 Azure WebJob。我正在关注Microsoft website 上的教程以及如何在Github 上将 TimerTrigger 与 WebJobs 一起使用的示例。但是,当我在本地运行时,我在 Functions.cs 中的方法似乎没有运行(没有日志记录和断点未命中)。

程序.cs:

public class Program
    
        static async Task Main()
        
            var builder = new HostBuilder();
            builder.ConfigureWebJobs(b =>
            
                b.AddAzureStorageCoreServices();
            );
            var host = builder.Build();
            using (host)
            
                await host.RunAsync();
            
        
    

函数.cs:

public class Functions
    

        public static void TimerJob([TimerTrigger("00:00:03", RunOnStartup = true)] TimerInfo timer)
        
            Console.WriteLine("Timer job fired!");
        
    

我在调试控制台中的唯一输出是:

Hosting environment: Production
Content root path: C:\Users\<blah>\<Project\bin\Debug\net472\

这是我的 nuget 包和版本:

我正在使用 .NET Framework 4.7.2

【问题讨论】:

能否请您参考这个energizedanalytics.com/en/azure-web-jobs-with-net-core & docs.microsoft.com/en-us/azure/app-service/webjobs-sdk-how-to,它可能会有所帮助 【参考方案1】:

最后,我弄明白了为什么我们的定时触发器没有在我们的网络作业中触发。安装以下nuget packages, 后,我能够在我的 .net framework 4.7.1 中使用您的function.cs 代码使其工作。

所以要使我们的带有计时器触发器的 webjob 工作,我们需要使用带有以下软件包的 2.X 或 3.X 版本:

Microsoft.Azure.WebJobs.Extensions - 版本 3.0.6

Microsoft.Azure.WebJobs.Extensions.Storage - 版本 3.0.1

Microsoft.Extensions.Logging - 2.1.0 版

Microsoft.Extensions.Logging.Console - 2.1.0 版

作为参考检查我在我的环境中使用的所有包:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net472" />
  <package id="Microsoft.Azure.WebJobs" version="3.0.14" targetFramework="net472" />
  <package id="Microsoft.Azure.WebJobs.Core" version="3.0.14" targetFramework="net472" />
  <package id="Microsoft.Azure.WebJobs.Extensions" version="3.0.6" targetFramework="net472" />
  <package id="Microsoft.Azure.WebJobs.Extensions.Storage" version="3.0.1" targetFramework="net472" />
  <package id="Microsoft.Azure.WebJobs.Host.Storage" version="3.0.14" targetFramework="net472" />
  <package id="Microsoft.Extensions.Configuration" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Configuration.Abstractions" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Configuration.Binder" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Configuration.EnvironmentVariables" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Configuration.FileExtensions" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Configuration.Json" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.DependencyInjection" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.FileProviders.Abstractions" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.FileProviders.Physical" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.FileSystemGlobbing" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Hosting" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Hosting.Abstractions" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Logging" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Logging.Abstractions" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Logging.Configuration" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Logging.Console" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Options" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Options.ConfigurationExtensions" version="2.1.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Primitives" version="2.1.0" targetFramework="net472" />
  <package id="ncrontab.signed" version="3.3.0" targetFramework="net472" />
  <package id="Newtonsoft.Json" version="11.0.2" targetFramework="net472" />
  <package id="System.Buffers" version="4.4.0" targetFramework="net472" />
  <package id="System.ComponentModel.Annotations" version="4.4.0" targetFramework="net472" />
  <package id="System.Diagnostics.TraceSource" version="4.3.0" targetFramework="net472" />
  <package id="System.Memory" version="4.5.0" targetFramework="net472" />
  <package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net472" />
  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.0" targetFramework="net472" />
  <package id="System.Threading.Tasks.Dataflow" version="4.8.0" targetFramework="net472" />
  <package id="WindowsAzure.Storage" version="9.3.1" targetFramework="net472" />

这是我的Program.cs,我在b.AddAzureStorageCoreServices();之后添加了AddTimers扩展方法

using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Hosting;
namespace usetimertrigger


    class Program
    
        static void Main(string[] args)
        
            var builder = new HostBuilder();
            builder.ConfigureWebJobs(b =>
            
                b.AddAzureStorageCoreServices();
                b.AddTimers();
            );
            builder.ConfigureLogging((context, b) =>
            
                b.AddConsole();

            );
            var host = builder.Build();
            using (host)
            
                host.Run();
            
        
    

function.cs

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System;

namespace usetimertrigger

    public class Functions
    

        public static void TimerJob([TimerTrigger("00:00:03", RunOnStartup = true)] TimerInfo timer)
        
            Console.WriteLine("Ajay timer trigger fired!");
        
    

如 MS DOC 中所述,添加了我的存储帐户访问密钥,该访问密钥是从 Azure 门户>存储帐户>访问密钥复制而来的

appsettings.json应该是Copy to Output DirectoryCopy always来配置我们的存储连接字符串,如下所示。

输出:-

在添加b.AddTimers();之前

添加b.AddTimers();

参考

所以线程:Scheduled .NET WebJob V3 example

【讨论】:

以上是关于Azure WebJobs SDK TimerTrigger 函数未运行的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Webjobs SDK 中设置 nextVisibleTime

什么是 Azure WebJobs SDK 3.0 版本的 host.Call()

Azure WebJobs SDK - 在啥情况下需要创建 JobHost 对象?

为啥我收到异常 Azure WebJobs SDK Dashboard connection string is missing or empty 当它根本不为空时?

Azure WebJob SDK 服务总线文档?

WebJobs 未重试失败的队列消息