1

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

作为一个学习过程,我正在尝试创建一个 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");
    }

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

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] 上触发

提前致谢

4

1 回答 1

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 将工作。

在此处输入图像描述

于 2017-05-22T02:53:47.920 回答