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 будет работать.

введите описание изображения здесь

Другие вопросы по тегам