更新:
请到azure webjobs log,然后你可以看到它实际上是按照SDK定义的timerTrigger运行的(即使Schedule是n/a,settings.job是空的,也没关系):
简而言之,当使用 webjob sdk 3.x 时,您可以使用TimerTrigger 属性按照您定义的时间运行函数。无需使用 webjobs SDK(如使用 .zip 文件或从 Visual Studio 发布控制台项目),您可以使用 setting.job 来定义计时器而不是 TimerTrigger 属性。
1.当您使用webjobs SDK 3.x进行定时器触发时,您应该添加这行代码:config.AddTimers();。
这是我使用 webjobs SDK 3.x 的代码(它是在 Visual Studio 中创建的 .net core 2.2 控制台项目):
最新版本的包:Microsoft.Azure.WebJobs / Microsoft.Azure.WebJobs.Extensions / Microsoft.Extensions.Logging.Console
Program.cs中的代码:
class Program
{
static void Main(string[] args)
{
var builder = new HostBuilder()
.ConfigureWebJobs(config =>
{
config.AddTimers();
config.AddAzureStorageCoreServices();
})
.ConfigureLogging((context, b) =>
{
b.AddConsole();
}
)
.Build();
builder.Run();
}
}
然后创建一个新文件,例如 SayHelloWebJob.cs,并在其中编写代码:
public class SayHelloWebJob
{
public void ProcessCollateFiles([TimerTrigger("0 */1 * * * *", RunOnStartup = false)]TimerInfo timerInfo,TextWriter writer)
{
writer.WriteLine("hi, it is a testing running");
Console.WriteLine("test");
}
}
请注意,在 appsettings.json 文件中,添加您的存储连接字符串,如下所示:
{
"AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=xxx;EndpointSuffix=core.windows.net"
}
然后运行项目,可以看到函数是按1分钟触发的:
2.对于settings.job,例如。如果您只是创建一个控制台项目,并且不使用 webjobs sdk。由于您没有使用 webjobs sdk,因此不能使用 timerTrigger 属性。此时,您可以在此项目中包含 settings.job 文件(在其属性中,将“复制到输出目录”设置为“如果较新则复制”)并像您在帖子中所做的那样配置计划的计时器。发布为 webjob 后(从 Visual Studio 发布时,选择“Webjob 运行模式”为“按需运行”),它可以按照您在 settings.job 中定义的计划运行。