我正在尝试创建一个 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] 上触发
提前致谢