Локальная отладка веб-задания Azure

Я создавал веб-задание Azure, он работает, по-видимому, нормально, но мне нужно создать новую функцию, и мне нужно протестировать локально перед загрузкой на рабочий сайт, я запускаю программу консоли Debug, и она распознает все функции, но я не могу запустить любая функция.

В документации указано, что следующий триггер - каждую минуту .... (https://github.com/Azure/azure-webjobs-sdk-extensions#timertrigger)

Мой код:

public static async void ProcessAugustEndowments([TimerTrigger("0 */1 * * * *", RunOnStartup = true)] TimerInfo timerInfo)
    {
        Console.WriteLine("Endowments process tried");

        await endowmentNotification();
    }

Вывод:  Пример вывода


person Cami Rodriguez    schedule 07.09.2016    source источник
comment
Одно простое решение ... напишите код для ручного вызова ProcessAugustEndowments из вашего Main() метода. Прокомментируйте или #ifdef в отношении host.RunAndBlock() метода, я полагаю, что у вас есть.   -  person Dean Goodman    schedule 07.09.2016
comment
Не работает только одна функция или все функции с TimerTrigger? вы настроили свой хостинг на использование таймеров config.UseTimers();?   -  person Thomas    schedule 08.09.2016
comment
Нет, у меня есть много функций с другим TimerTrigger, и да, эта конфигурация есть в моем WebJob   -  person Cami Rodriguez    schedule 08.09.2016
comment
@DeanGoodman вы также можете вызвать функцию webjob непосредственно в методе Main класса Program проекта Job.   -  person Ulysses Alves    schedule 06.08.2019


Ответы (2)


Я запускаю отладочную консольную программу, и она распознает все функции, но я не могу запустить какую-либо функцию.

Основываясь на вашем коде, я протестировал его на своей стороне и обнаружил, что при первой отладке приложения я могу получить следующий результат:

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

Но когда я перезапустил приложение, я обнаружил, что для срабатывания функции потребуется некоторое время.

Убедитесь, что вы установили последние версии пакетов «Microsoft.Azure.WebJobs» и «Microsoft.Azure.WebJobs.Extensions». Для получения дополнительной информации вы можете следить за этим руководство.

И, пожалуйста, попробуйте уменьшить временной интервал в вашем TimerTrigger и подождите, пока не запустится хост задания, а затем попытайтесь выяснить, может ли эта функция активироваться на вашей стороне. Вот мой образец кода, вы можете на него сослаться.

Program.cs

static void Main()
{
    JobHostConfiguration config = new JobHostConfiguration();
    // Add Triggers and Binders for Timer Trigger.
    config.UseTimers();
    JobHost host = new JobHost(config);
    //host.RunAndBlock();
    host.Start();
    Console.WriteLine("[{0}] Job Host started!!!", DateTime.Now);
    Console.ReadLine();
}

Function.cs

//Function triggered by a timespan schedule every 5 sec.
public static async void ProcessAugustEndowments([TimerTrigger("*/5 * * * * *", RunOnStartup = true)] TimerInfo timerInfo)
{
    Console.WriteLine("Endowments process tried");
    await endowmentNotification();
}

private static async Task endowmentNotification()
{   
    //sleep for 2 sec to simulate processing business logic
    await Task.Delay(TimeSpan.FromSeconds(2));
}

Кроме того, если TimerTrigger не соответствует вашим требованиям, вы можете обратиться к этому официальному руководство по созданию расписания веб-задания; также вы можете обратиться к этому блог.

person Bruce Chen    schedule 08.09.2016
comment
Спасибо за ответ, протестирую! : D - person Cami Rodriguez; 08.09.2016
comment
Вы решили эту проблему? Я обнаружил, что эта проблема может быть связана с неявной блокировкой слушателя для TimerTrigger. Чтобы лучше понять, как Это. - person Bruce Chen; 21.09.2016

Если ваши функции не запускаются, я полагаю, это потому, что вы не настроили свой JobHost, вы используете TimerTrigger:

var config = new JobHostConfiguration();
config.UseTimers();

Как JobHost работает с триггерами:

  • Когда JobHost запускается, он обнаруживает и индексирует функции с некоторым *TriggerAttribute.

  • Указав config.UseTimers();, вы сообщаете JobHost индексировать функции с помощью TimerTriggerAttribute.

Это также справедливо для других типов триггеров, таких как ServiceBusTrigger, для работы которых требуется config.UseServiceBus().

person Thomas    schedule 08.09.2016