c# - 在Azure Function中运行控制台应用程序的program.cs文件?

标签 c# .net azure azure-functions

我有一个控制台应用程序,我想将其转换为 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
}

然后,在运行应用程序时,您将看到如下端点:

enter image description 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/

相关文章:

.net - WPF 应用程序失去触摸功能

c# - ASP.NET Core 404 响应中的 Service Fabric 反向代理集成

C# 文件处理 : Create file in directory where executable exists

C#/.NET 如何高亮显示DataGridView 中的某些行

c# - Windows 事件日志中的 LdapConnection.SendRequest() 问题

c# - 初学者如何将 PHP 转换为 .NET

c# - 如何限制用户在多个文本输入中输入重复文本

c# - C# 字符串是否以空字符串结尾?

node.js - 将范围添加到 OpenID Connect 身份提供程序(Azure AD 租户)后,新范围不会在 idp access_token 中返回

azure - Terraform azure 提供商给了我 "features required field not set"