Azure Function 计时器触发器未触发

Dil*_*ena 2 c# azure-functions

我最近将我的 Azure Functions 项目更改为具有.Net 6 Isolated运行时,但现在当我部署它时,我的计时器触发器永远不会触发。我浏览了很多类似的帖子,但我所做的任何更改似乎都无法解决它。它在本地运行良好,只是部署后就不行了。

程序.cs

using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .Build();

host.Run();
Run Code Online (Sandbox Code Playgroud)

函数的文件

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace MyProj.AzureFunctions
{
    public class Functions
    {
        private readonly ILogger _logger;

        public Functions(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<Functions>();
        }

        [Function("Health")]
        public void Health([TimerTrigger("* * * * *")] MyInfo myTimer, ILogger log)
        {
            log.LogInformation("Health Check Successful.");
        }
    }

    public class MyInfo
    {
        public MyScheduleStatus ScheduleStatus { get; set; }

        public bool IsPastDue { get; set; }
    }

    public class MyScheduleStatus
    {
        public DateTime Last { get; set; }

        public DateTime Next { get; set; }

        public DateTime LastUpdated { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

主机.json

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingExcludedTypes": "Request",
            "samplingSettings": {
                "isEnabled": true
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

本地.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
  }
}
Run Code Online (Sandbox Code Playgroud)

.csproj 配置

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.8.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.7.0" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/>
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

Azure 函数设置

设置

我试图查看日志文件,/LogFiles/Application/Functions/Host但找不到任何线索。该文件只是重复了几百次

2023-02-28T19:48:29.700 [Information] Host Status: {
  "id": "devfunctions",
  "state": "Running",
  "version": "4.15.2.20177",
  "versionDetails": "4.15.2+28e9550320b13137f4eaf16483ebcdb630699506",
  "platformVersion": "99.0.10.793",
  "instanceId": "de79fd99bf2007cea7cba17a54c929b84f3dafad58d9cd5c0c16eccc0cd59790",
  "computerName": "10-30-3-159",
  "processUptime": 4170653,
  "functionAppContentEditingState": "Unknown"
}
Run Code Online (Sandbox Code Playgroud)

但找不到任何证据证明我的函数曾经被触发过。

aks*_*eli 8

看看你的代码,你似乎遇到了我不久前遇到的同样的问题。

VS 模板似乎默认创建了一个包含五个元素的 cron 语句:* * * * *而实际上您需要六个 ( NCRONTAB) 才能使函数正确执行:* * * * * *( {second} {minute} {hour} {day} {month} {day-of-week})

这是一个奇怪的错误,但您可以在此处查看有关 Timmer 触发器和可能的NCRONTAB语句的更多信息。