运行 program.cs Azure Function 中控制台应用程序的文件?
Run program.cs file of console application in Azure Function?
我有一个控制台应用程序,我想将其转换为 Azure Function Timer Trigger 应用程序,该应用程序将在完成一些数据处理和上传后每小时 运行。数据处理和上传是通过 类 完成的,它们被注入到控制台应用程序的 program.cs 文件中。在 类 的某处,我有一个 task.delay by 1hour ,它将在第一次查询和上传数据后查询新数据。因此,我将控制台应用程序的整个代码及其包复制到 Azure Function Timer 触发器应用程序。我想要做的是 运行 控制台应用程序的 program.cs 文件首先在 azure 函数应用程序中完成它的工作(数据处理、查询数据、将数据上传到 azure ... ).然后启动定时器触发器。那可行吗?在azure function app的运行方法中添加哪一行代码,先执行program.cs文件,再发起触发器。您可以在这里找到 azure function time trigger 应用程序的启动代码。
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}");
}
}
}
Azure 函数本质上是事件驱动的。如果函数触发器意味着处理的事件。
运行 函数的方法表示函数已触发及其入口点。
如果你想在它之前进行任何处理或代码执行,你可能需要再编写一个函数并执行这些步骤,然后触发计时器触发器或 ant 不同类型的另一个函数。
有几个解决方案可以实现这一点。
解决方法一、暂时将timer触发器换成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)中打开端点,函数就会被调用。
然后 在 将代码推送到 repo 之前,只需带回原始 Run
功能并删除 http 触发器。
解决方案2:添加另一个调用定时器函数的http触发器
将以下函数添加到您的应用程序以公开 http 触发器。
[FunctionName("Test")]
public static async Task Test([HttpTrigger] Microsoft.AspNetCore.Http.HttpRequest req, ILogger log)
{
Run(null, log);
}
函数基本上调用了Run
函数。
因此,当您 运行 应用程序时,您将再次从控制台获得一个端点,可以从浏览器使用该端点来触发该功能。
url 将如下所示:
http://localhost:7071/api/Test
我有一个控制台应用程序,我想将其转换为 Azure Function Timer Trigger 应用程序,该应用程序将在完成一些数据处理和上传后每小时 运行。数据处理和上传是通过 类 完成的,它们被注入到控制台应用程序的 program.cs 文件中。在 类 的某处,我有一个 task.delay by 1hour ,它将在第一次查询和上传数据后查询新数据。因此,我将控制台应用程序的整个代码及其包复制到 Azure Function Timer 触发器应用程序。我想要做的是 运行 控制台应用程序的 program.cs 文件首先在 azure 函数应用程序中完成它的工作(数据处理、查询数据、将数据上传到 azure ... ).然后启动定时器触发器。那可行吗?在azure function app的运行方法中添加哪一行代码,先执行program.cs文件,再发起触发器。您可以在这里找到 azure function time trigger 应用程序的启动代码。
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}");
}
}
}
Azure 函数本质上是事件驱动的。如果函数触发器意味着处理的事件。
运行 函数的方法表示函数已触发及其入口点。
如果你想在它之前进行任何处理或代码执行,你可能需要再编写一个函数并执行这些步骤,然后触发计时器触发器或 ant 不同类型的另一个函数。
有几个解决方案可以实现这一点。
解决方法一、暂时将timer触发器换成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)中打开端点,函数就会被调用。
然后 在 将代码推送到 repo 之前,只需带回原始 Run
功能并删除 http 触发器。
解决方案2:添加另一个调用定时器函数的http触发器
将以下函数添加到您的应用程序以公开 http 触发器。
[FunctionName("Test")]
public static async Task Test([HttpTrigger] Microsoft.AspNetCore.Http.HttpRequest req, ILogger log)
{
Run(null, log);
}
函数基本上调用了Run
函数。
因此,当您 运行 应用程序时,您将再次从控制台获得一个端点,可以从浏览器使用该端点来触发该功能。
url 将如下所示:
http://localhost:7071/api/Test