在本地调试Azure WebJob

时间:2016-09-07 20:46:44

标签: c# azure azure-webjobs azure-webjobssdk

我一直在创建一个Azure WebJob,它的工作非常好,但是我需要创建一个新的功能,我需要在上传到生产站点之前进行本地测试,我运行调试控制台程序,这可以识别所有功能但是我无法触发任何功能。

文档说下一次触发是每分钟....(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();
    }

输出: Output example

2 个答案:

答案 0 :(得分:1)

  

我运行调试控制台程序,这可以识别所有功能,但我不能触发任何功能。

根据您的代码,我在我身边进行了测试,发现当我第一次调试应用程序时,我可以得到以下输出:

enter image description here

但是,当我重新启动应用程序时,我发现触发该功能需要一些时间。

请确保您已安装最新版本的软件包" Microsoft.Azure.WebJobs"和" Microsoft.Azure.WebJobs.Extensions"。有关详细信息,请参阅此tutorial

请尝试减少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无法满足您的要求,您可以参考此官方tutorial创建日程安排WebJob,也可以参考此blog

答案 1 :(得分:1)

如果您的功能未被触发,我认为是因为您没有配置JobHost您使用的TimerTrigger

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

JobHost如何与触发器配合使用:

  • JobHost启动时,会发现并使用某些*TriggerAttribute对函数编制索引。

  • 通过指定config.UseTimers();告诉JobHost使用TimerTriggerAttribute索引函数。

这也适用于需要ServiceBusTrigger工作的其他类型的触发器,例如config.UseServiceBus()