C# 中的 TimerTrigger 未触发
Posted
技术标签:
【中文标题】C# 中的 TimerTrigger 未触发【英文标题】:TimerTrigger in C# is not triggering 【发布时间】:2021-12-26 03:36:14 【问题描述】:我正在使用 TimerTrigger CRON 作业将任务安排为 2 天,但触发器似乎不起作用。 以下是我尝试过的代码,
public static void StartupJob([TimerTrigger("0 * * * * *", RunOnStartup = true)] TimerInfo timerInfo) //0 * * * * * added CRON job to run for every minute for testing purpose
Console.WriteLine("Timer job fired!");
local.settings.json
"IsEncrypted": false,
"Values":
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
由于上面的代码不起作用,我在 main() 中添加了以下内容
static void Main()
var config = new JobHostConfiguration();
config.UseTimers();
config.Tracing.ConsoleLevel = System.Diagnostics.TraceLevel.Verbose;
if (config.IsDevelopment)
config.UseDevelopmentSettings();
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
收到以下错误并显示安装 DocumentFormat 包的修复程序,但安装此包无法解决 FunctionName 错误。
我是 C# 的新手,无法在这里找到问题所在。任何帮助或对好的示例的参考都会有所帮助和赞赏。
谢谢。
【问题讨论】:
我想也许你在 CRON 表达式中的一颗星太多了。我不熟悉 CRON,但那里的一位表达式测试器暗示了这一点。 进一步研究,看起来你应该每分钟都有“* * * * *”。 @BentTranberg 不,这不起作用它没有触发 根据您发布的代码,您似乎缺少FunctionName
属性。所以附上它就像[FunctionName("StartupJob")]
@user1672994 是否需要添加任何包才能使用 FunctionName?
【参考方案1】:
我试图重现您的问题并想通了。
首先,我在 Visual Studio 中创建了 Azure Function 并选择了 Timer Trigger > 点击创建
根据您每分钟运行此计时器触发功能的要求,我将表达式更改为[TimerTrigger("0 * * * * *")]
-
之后,构建项目并在本地运行函数。
输出是:
-
在 Azure 中创建了 Function App(消费计划)。
将上述函数应用从 Visual Studio 发布到 Azure 函数应用。
然后,转到 Azure 门户 > 您的函数应用程序 > 函数(在左侧索引窗格中) > 单击您的函数名称(在我的例子中是 Function1)
之后,转到代码+集成,点击测试/运行你的函数,日志将开始记录函数的执行,如下所示:
示例 2(使用问题中的给定代码):
问题在于Console.Writeline
是一个静态函数。 您可以将其输出 (stdout) 重定向到其他位置,但您无法跟踪该语句在到达标准输出后从何处运行。
为了让我们对每个函数调用进行日志记录,我们需要知道它来自哪个函数以及它属于哪个特定的调用 id。这就是TraceWriter
所做的。从那里,我们的日志引擎将其输出到 Storage 以供我们的仪表板获取。我们确实将 stdout 管道通过管道传输到 WebJob 日志,但将其绑定回给定的调用并不简单。
欲了解更多信息,请关注:https://github.com/Azure/azure-webjobs-sdk/issues/682
可以使用的另一种方法是自定义日志记录框架(例如 Serilog)并将日志输出直接输出到控制台。
有关记录样本的更多信息,您可以点击以下链接:
https://docs.microsoft.com/en-us/sandbox/functions-recipes/logging?tabs=csharp
【讨论】:
如果回答对您有帮助,请Accept it as an Answer,以便其他遇到相同问题的人可以找到此解决方案并解决他们的问题!以上是关于C# 中的 TimerTrigger 未触发的主要内容,如果未能解决你的问题,请参考以下文章
Azure Function App:Http 触发器与计时器触发器