VS2017 Azure WebJob Extensions - Как развернуть TimerTrigger WebJob? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть следующий проект WebJob, в котором я пытаюсь развернуть функцию TimerTrigger WebJob, однако не могу запустить ее по расписанию при ее развертывании с помощью «Опубликовать как Azure WebJob ...» в Visual Studio 2017.

Program.cs

class Program
{
    static void Main()
    {
        var config = new JobHostConfiguration();

        if (config.IsDevelopment)
        {
            config.UseDevelopmentSettings();
        }

        config.UseTimers();

        var host = new JobHost(config);
        host.RunAndBlock();
    }
}

Functions.cs

public class Functions
{
        public static async Task ProcessAsync([TimerTrigger("0 */3 * * * *")] TimerInfo timerInfo, TextWriter log)
        {
              ...
        }
}

webjob-publish-settings.json

{
  "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
  "webJobName": "TestWebJob",
  "runMode": "OnDemand"
}

Settings.job

{ "schedule": "0 */3 * * * *" }

Документация для этого практически отсутствует, и это сбивает с толку то, почему Azure поддерживает ScheduledCRON TimerTrigger, но на самом деле не включает их в качестве опции при развертывании.

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Если вы создали расписание веб-задания вручную, я думаю, что вы, вероятно, обнаружили, что оно сгенерирует settings.job для установки schedule. Затем SCHEDULE на портале прочитайте schedule ипокажи это.И если вы развернете веб-работу TimerTrigger с VS2017, он не будет генерировать этот файл, поскольку вы определили функцию TimerTrigger.

Затем я провел несколько тестов, чтобы показать это. Сначала я создаю веб-работу с TimerTrigger и внедряю ее, он покажет тот же результат, что и ваш с n/a SCHEDULE .Затем я прекращаю процесс webjob и загружаю файл settings.job, затем обновляю (не обновляю на портале) страницу, затем SCHEDULE меняется на выражение CRON.И если вы удалите файл, он изменится обратно.enter image description hereenter image description here

Что касается журнала, по моему мнению, это также вызвано settings.job, если у вас есть этот файл, он вызовет этотwebjob каждые x минут, и если у вас его нет, он будет запускать функцию каждые x минут в webjob.

Если у вас остались вопросы, пожалуйста, дайте мне знать.

0 голосов
/ 13 декабря 2018

Кажется, что вышеприведенный код работает .Однако он работает совсем не так, как вы себе представляете, если вы знакомы с запуском «Запланированных» веб-заданий вручную.

Если бы вы запускали их вручную, вы обычно видели бы расписание на верхнем уровне, а такжес обновлением статуса каждые x минут и т. д .:

WebJob

, и вы также увидите обновление журналов на родительском уровне, например:

logs 1

Однако при развертывании его с помощью вышеуказанного метода в Visual Studio 2017 вы можете запустить WebJob только один раз в течение срока его службы.В результате вы также получите только один родительский журнал в списке журналов.

Хотя, если вы нажмете на это, вы увидите отдельные журналы для каждого запланированного журнала функций:

function logs

Надеюсь, это будет иметь смысл для других людей, которые хотят настроить WebJobs :)

...