我一直在创建一个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();
}
答案 0 :(得分:1)
我运行调试控制台程序,这可以识别所有功能,但我不能触发任何功能。
根据您的代码,我在我身边进行了测试,发现当我第一次调试应用程序时,我可以得到以下输出:
但是,当我重新启动应用程序时,我发现触发该功能需要一些时间。
请确保您已安装最新版本的软件包" 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()