我有一个控制台应用程序,我想将其转换为 Azure 函数计时器触发器应用程序,该应用程序将在完成一些数据处理和上传后每小时运行一次。数据处理和上传是通过注入(inject)控制台应用程序的program.cs 文件中的类完成的。在类(class)中的某个地方,我有一个任务。延迟 1 小时,它将在第一次查询和上传数据后查询新数据。因此,我将控制台应用程序的整个代码及其包复制到 Azure Function Timer 触发器应用程序。我想做的是首先在azure函数应用程序中运行控制台应用程序的program.cs文件,以便完成其工作(数据处理、查询数据、将数据上传到azure...)。然后启动定时器触发器。这可行吗?我可以在azure function app的run方法中添加哪行代码来先执行program.cs文件,然后启动触发器。您可以在此处找到azure函数时间触发器应用程序的启动代码。
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
namespace ExportServiceFunctionApp
{
public static class ExportServiceFunctionApp
{
[FunctionName("ExportServiceFunctionApp")]
public static void Run([TimerTrigger("0 0 */1 * * * ")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
}
}
最佳答案
有一些解决方案可以实现这一目标。
解决方案1.暂时将定时器触发器替换为http触发器
在调试应用程序时,我们只需注释原始 Run
函数的第一行并添加 http 触发器,如下所示:
public static async Task Run([HttpTrigger] Microsoft.AspNetCore.Http.HttpRequest req, ILogger log)
// public static async Task Run([TimerTrigger("0 0 * * * *")] TimerInfo myTimer, ILogger log)
{
// YOUR REGULAR CODE HERE
}
然后,在运行应用程序时,您将看到如下端点:
只需在浏览器(或 postman )中打开端点,该函数就会被调用。
在将代码推送到存储库之前,只需带回原始的 Run
函数并删除 http 触发器即可。
解决方案 2:添加另一个调用计时器函数的 http 触发器
将以下函数添加到您的应用程序以公开 http 触发器。
[FunctionName("Test")]
public static async Task Test([HttpTrigger] Microsoft.AspNetCore.Http.HttpRequest req, ILogger log)
{
Run(null, log);
}
该函数基本上调用Run
函数。
因此,当您运行应用程序时,您将再次从控制台获得一个端点,可以从浏览器使用该端点来触发该功能。
网址将如下所示:
http://localhost:7071/api/Test
关于c# - 在Azure Function中运行控制台应用程序的program.cs文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70168409/