Azure基于时间的函数在发布后不触发

tyky79it  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(142)

我在过去的10年里开发了许多Http触发函数(.NET Framework)。我爱他们我还开发了一些计时器触发的Azure功能。
从过去的15天里,我一直在努力解决愚蠢的问题,我找不到解决方案。
我开发了完整的Azure函数(.NET 6)并发布到Azure,它从未按时调用(5分钟)。通过不同的实验进行故障排除。
这里我有一个简单的案例让你理解。
我把事情分解成简单的步骤。白手起家
我从门户创建了一个Azure函数(基于计时器),它每5分钟调用一次。我下载了发布配置文件,在C# .NET6/7中创建了一个Azure函数(没有任何更改),我发布到门户网站。它在5分钟后调用。
当我安装实体框架Nuget包时,代码没有变化,发布了函数。它不会调用Azure函数(永远不会)。
始终将interval设置为"0 */5 * * * *"
附加信息:我不想从Visual Studio创建在Azure中登录的函数
你以前遇到过这个问题吗?你建议我试试什么?
下面是我的函数的代码片段

public class LateNotice
    {
        [FunctionName("LateNotice")]
        public void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        }
    }
vm0i2vca

vm0i2vca1#

Time trigger中使用Azure Functions上的Entity Framework with Dependency Injection。感谢@Kunal Borkar

验证码:

public class MyTimerFunction
    {
        private readonly MyDbContext dbContext;

        public MyTimerFunction(MyDbContext dbContext)
        {
            this.dbContext = dbContext;
        }

        [FunctionName("MyTimerFunction")]
        public void Run([TimerTrigger("0 * * * * 5"
#if DEBUG
            , RunOnStartup = true
#endif
        )] TimerInfo myTimer, [DurableClient] IDurableOrchestrationClient starter, ILogger log, ExecutionContext context)
        {
            try
            {
                
                var csv = GetCSVDetails.GetCSVContent(Path.Combine(context.FunctionAppDirectory, "Resources", "new_user_credentials.csv"));
                if (csv != null)
                {
                    foreach (var line in csv)
                    {
                        var username = line.Username;

                        // Check if a record with the same username already exists
                        var existingRecord = dbContext.Test.FirstOrDefault(x => x.Username == username);

                        if (existingRecord != null)
                        {
                           
                            log.LogInformation($"Updated existing record for Username: {username}");
                        }
                        else
                        {

                            var test = new Data
                            {
                                Username = username,
                                Password = line.Password,
                                AccesskeyID = line.AccesskeyID,
                                Secretaccesskey = line.Secretaccesskey,
                                Consoleloginlink = line.Consoleloginlink
                            };

                            dbContext.Test.Add(test);
                        }
                    }

                    dbContext.SaveChanges();
                }
                else
                {
                    log.LogWarning(" data is null or invalid.");
                }

                log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
            }
            catch (Exception e)
            {
                log.LogCritical(e.Message);
                log.LogCritical(e.StackTrace);

                if (e.InnerException != null)
                {
                    log.LogCritical("Inner Exception: " + e.InnerException.Message);
                    log.LogCritical("Inner Exception Stack Trace: " + e.InnerException.StackTrace);
                }
            }
        }
    }
public class StartUp : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            string connectionString = "Azuresqlconnectionstring";
            builder.Services.AddDbContext<MyDbContext>(
              options => SqlServerDbContextOptionsExtensions.UseSqlServer(options, connectionString));
        }
    }

输出:

相关问题