Azure C# Webjob TimeTrigger не запускается
Я пытаюсь создать веб-задание Azure, которое будет выполнять функции Functions.Methods по заданному таймеру. Я настроил простой проект WebJob в VS2017 и добавил 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();
}
Метод Function, который я хотел бы вызвать, выглядит следующим образом:
[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" и "Выполнить функцию", я вскоре получу электронное письмо от My SendMail Method со следующим выводом:
[20.05.2017 11:47:31] Подготовка к отправке почты
[20.05.2017, 11:47:32] Почта успешно отправлена
RE: [NoAutomaticTrigger]
Одно из предложенных мною предложений - удалить атрибут [NoAutomaticTrigger] из метода SendMail, так как это говорит рабочему узлу игнорировать таймер, но если я делаю это, я получаю:
Не найдено ни одной вакансии. Попробуйте сделать ваши классы и методы работы публичными. Если вы используете связывающие расширения (например, ServiceBus, Timers и т. Д.), Убедитесь, что вы вызвали метод регистрации для расширения (ей) в своем коде запуска (например, config.UseServiceBus(), config.UseTimers() и т. Д..).
Поэтому вопрос заключается в том, как заставить мой метод sendmail запускаться по указанному [TimerTrigger] при запуске в Azure как WebJob.
заранее спасибо
1 ответ
Поэтому вопрос заключается в том, как заставить мой метод sendmail запускаться по указанному [TimerTrigger] при запуске в Azure как WebJob.
Основываясь на вашем коде, я обнаружил, что вы пропустили передачу параметра конфигурации в JobHost.
var host = new JobHost(config);
Кроме того, атрибут NoAutomaticTrigger действительно необходимо удалить, а атрибут TimerTrigger следует применить к параметру, тип которого - TimerInfo. Код ниже для вашей справки.
public static void SendMail([TimerTrigger("00:00:10")] TimerInfo timer, TextWriter log)
После этого TimerTrigger будет работать.