Azure C#Webjob时间触发器未触发

Azure C#Webjob时间触发器未触发,c#,azure,timer,webjob,C#,Azure,Timer,Webjob,我正在尝试创建一个Azure WebJob,它将在设置的计时器上执行函数.方法。我在VS2017中设置了一个简单的WebJob项目,并添加了Microsoft.Azure.Webjobs.Extensions以允许我引用计时器 作为一个学习过程,我正在尝试创建一个WebJob,当计时器触发时,它将调用函数方法向我的地址发送电子邮件(例如,每60秒发送一封电子邮件) 我的主要空虚是这样的: public static void Main() { var config = n

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

作为一个学习过程,我正在尝试创建一个WebJob,当计时器触发时,它将调用函数方法向我的地址发送电子邮件(例如,每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");
    }
我要调用的函数方法如下所示:

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仪表板/函数/函数调用日志并“运行函数”,我很快就会收到一封来自SendMail方法的电子邮件,输出如下:

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

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

回复:[无自动变速器]

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

找不到作业函数。试着公开你的作业类和方法。如果您使用的是绑定扩展(例如ServiceBus、Timers等),请确保已在启动代码(例如config.UseServiceBus()、config.UseTimers()等)中调用了扩展的注册方法

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

提前谢谢

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

根据您的代码,我发现您没有将config参数传递给JobHost

var host = new JobHost(config);
此外,确实需要删除NoAutomaticTrigger属性,并且应该将TimerTrigger属性应用于类型为TimerInfo的参数。以下代码仅供参考

public static void SendMail([TimerTrigger("00:00:10")] TimerInfo timer, TextWriter log)
之后,计时器将工作


非常感谢。此外,您知道我是否能够在[TimerTrigger]属性中使用cron来允许我每周运行一次作业吗?例如,0**1可以,它将在周一00:00每周运行一次作业。