Dil*_*ena 2 c# azure-functions
我最近将我的 Azure Functions 项目更改为具有.Net 6 Isolated运行时,但现在当我部署它时,我的计时器触发器永远不会触发。我浏览了很多类似的帖子,但我所做的任何更改似乎都无法解决它。它在本地运行良好,只是部署后就不行了。
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)
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
Run Code Online (Sandbox Code Playgroud)
<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)
我试图查看日志文件,/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)
但找不到任何证据证明我的函数曾经被触发过。
看看你的代码,你似乎遇到了我不久前遇到的同样的问题。
VS 模板似乎默认创建了一个包含五个元素的 cron 语句:* * * * *而实际上您需要六个 ( NCRONTAB) 才能使函数正确执行:* * * * * *( {second} {minute} {hour} {day} {month} {day-of-week})
这是一个奇怪的错误,但您可以在此处查看有关 Timmer 触发器和可能的NCRONTAB语句的更多信息。