【问题标题】:Azure C# Webjob TimeTrigger not firingAzure C# Webjob TimeTrigger 未触发
【发布时间】:2017-05-20 11:58:04
【问题描述】:

我正在尝试创建一个 Azure WebJob,它将在设置的计时器上执行 Functions.Methods。我在 VS2017 中设置了一个简单的 WebJob 项目并添加了 Microsoft.Azure.Webjobs.Extensions 以允许我引用 Timers。

作为一个学习过程,我正在尝试创建一个 WebJob,它会在 TimerTrigger 触发时调用函数方法向我的地址发送电子邮件(例如,每 60 秒发送一封电子邮件)

我的主要空白看起来像这样:

public static void Main()
    {
        var config = new JobHostConfiguration();

        config.Tracing.ConsoleLevel = System.Diagnostics.TraceLevel.Verbose;


        config.UseTimers();

        var host = new JobHost();
        host.RunAndBlock();
    }

我想调用的函数方法如下所示:

    [NoAutomaticTrigger]    //See below note on [NoAutomaticTrigger]
    public static void SendMail([TimerTrigger("00:00:10", RunOnStartup = true)] TextWriter log)
    {
        log.WriteLine("[" + DateTime.Now.ToString() + "] Preparing to send Mail");
        MailMessage Message = new MailMessage();
        SmtpClient MailClient = new SmtpClient();

        String FromAddress = "****";
        String FromName = "****";
        String Password = "****;
        String ToAddress = "****";

        MailClient.UseDefaultCredentials = false;
        MailClient.Credentials = new System.Net.NetworkCredential(FromAddress, Password);
        MailClient.Port = 587;
        MailClient.Host = "****";
        MailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        MailClient.EnableSsl = true;



        Message.To.Add(ToAddress);
        Message.From = new MailAddress(FromAddress, FromName);
        Message.Subject = "WebJob | Test Mail";
        Message.Body = "TimerTrigger Function Sendmail triggered at: " + DateTime.Now.ToString();
        MailClient.Send(Message);
        log.WriteLine("[" + DateTime.Now.ToString() + "] Mail Successfully Sent");
    }

现在,如果我在本地调试上述内容,我会看到 this

SendMail 方法永远不会触发。

现在,如果我将其作为 WebJob 上传到 azure,然后导航到 WebJob Dashboard/Functions/Function Invocation Log 和“运行函数”,不久后我会从我的 SendMail 方法收到一封电子邮件,其中包含以下输出:

[5/20/2017 11:47:31 AM] 准备发送邮件

[5/20/2017 11:47:32 AM] 邮件成功发送

回复:[NoAutomaticTrigger]

我的一个建议是从 SendMail 方法中删除 [NoAutomaticTrigger] 属性,因为这会告诉作业主机忽略计时器,但如果我这样做,我会得到:

未找到工作职能。尝试公开您的工作类别和方法。如果您正在使用绑定扩展(例如 ServiceBus、Timers 等),请确保您已在启动代码中调用了扩展的注册方法(例如 config.UseServiceBus()、config.UseTimers() 等.).

所以问题是,当在 Azure 中作为 WebJob 运行时,如何让我的 sendmail 方法在指定的 [TimerTrigger] 上触发

提前致谢

【问题讨论】:

    标签: c# azure timer webjob


    【解决方案1】:

    所以问题是,当在 Azure 中作为 WebJob 运行时,如何让我的 sendmail 方法在指定的 [TimerTrigger] 上触发

    根据您的代码,我发现您错过了将配置参数传递给 JobHost。

    var host = new JobHost(config);
    

    此外,确实需要删除 NoAutomaticTrigger 属性,并且应将 TimerTrigger 属性应用于类型为 TimerInfo 的参数。以下代码供您参考。

    public static void SendMail([TimerTrigger("00:00:10")] TimerInfo timer, TextWriter log)
    

    之后,TimerTrigger 就会工作。

    【讨论】:

    • 非常感谢。此外,您是否知道我是否能够在 [TimerTrigger] 属性中使用 cron 来使我能够每周运行一次作业?
    • 0 0 0 * * 1 没问题,它将在每周一 00:00 运行一次作业。
    猜你喜欢
    • 2016-11-26
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多