Azure WebJob未触发,始终提示“No job functions found”求助
我之前也碰到过一模一样的问题,折腾了好一会儿才捋清楚原因,给你列几个最值得排查的方向:
检查Job类和方法的访问修饰符:必须确保你的TimerJob类和标注了
[TimerTrigger]的方法都是public的。很多时候会不小心把类写成默认的internal,导致WebJobs SDK识别不到函数。示例代码应该是这样的:public class MyTimerJob { public void RunDailyJob([TimerTrigger("0 0 0 * * *")] TimerInfo timer) { // 你的业务逻辑代码 } }确认Startup类的扩展注册方式是否匹配SDK版本:这是很多人踩坑的点!如果你用的是WebJobs SDK 3.x及以上版本,注册Timers扩展的方式已经从
config.UseTimers()改成了builder.AddTimers(),而且Startup类需要实现IWebJobsStartup并添加对应的程序集特性。正确的写法如下:using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Hosting; [assembly: WebJobsStartup(typeof(YourWebJobNamespace.Startup))] namespace YourWebJobNamespace { public class Startup : IWebJobsStartup { public void Configure(IWebJobsBuilder builder) { builder.AddTimers(); // SDK 3.x+ 用这个方式注册 } } }如果你还在老版本SDK(2.x)里用
config.UseTimers(),那要确保你的Startup逻辑是在Program里通过JobHostConfiguration配置的:static void Main() { var config = new JobHostConfiguration(); config.UseTimers(); // SDK 2.x 用这个方式 var host = new JobHost(config); host.RunAndBlock(); }检查NuGet包版本兼容性:确保
Microsoft.Azure.WebJobs.Extensions.Timers包的版本和Microsoft.Azure.WebJobs核心包的版本完全匹配。版本不兼容会导致扩展无法正常加载,自然识别不到触发器函数。比如核心包是3.0.x,Timers扩展也得是3.0.x系列的。确认WebJob的运行模式:TimerTrigger需要WebJob运行在连续模式下才能持续触发。去Azure门户的WebJob设置里看看,是不是不小心选了“按需”或者“定时”模式,改成“连续”模式再试试。
验证TimerTrigger的CRON表达式和参数:CRON表达式的格式要正确(秒 分 时 日 月 周),比如
0 */5 * * * *表示每5分钟触发一次。另外方法的参数要使用TimerInfo类型,不要用其他不兼容的类型。查看详细日志排查隐藏问题:本地运行时看控制台输出,或者在Azure门户里查看WebJob的日志流,有没有扩展加载失败、依赖缺失之类的详细错误信息,这些往往能帮你定位到根本问题。
内容的提问来源于stack exchange,提问作者LilRazi

