gpt4 book ai didi

c# - Azure函数应用程序: TimerTrigger not Firing when Deployed

转载 作者:行者123 更新时间:2023-12-02 03:03:43 25 4
gpt4 key购买 nike

我有一个通过 TimerTrigger 运行的 Azure Function App (v2)(每天午夜 - 美国东部时间)。当我在 Visual Studio 本地运行它时,它工作正常。但是,当我使用内置的 Visual Studio 发布工具将其直接发布到我的函数应用程序(Zip Deploy)时,它不会在午夜或任何时间触发。

我还尝试直接通过 Azure 门户运行该函数,但这也不起作用。这是我的代码。它所做的只是从 Azure 存储中提取文件,更新排名游戏 JSON,然后将该文件替换回 Azure 存储中。我有一个移动应用程序,可以提取 ranked_settings.json 并生成排名游戏。

[FunctionName("RankedSettingsIntervalFunction")]
public static void Run([TimerTrigger("0 0 0 */1 * *")]TimerInfo myTimer, ILogger log, ExecutionContext context)
{
Console.WriteLine("App started running at " + DateTimeOffset.UtcNow.ToString());

const string fileName = "ranked_settings.json";

var config = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();

var conn1 = config["FileStorage:ConnectionStringOne"];
var conn2 = config["FileStorage:ConnectionStringTwo"];

StorageService service = new StorageService(conn1, conn2);
Settings settings = RankedSettingsGenerator.Generate();
var json = JsonConvert.SerializeObject(settings);

Console.WriteLine("App original JSON created at " + DateTimeOffset.UtcNow.ToString());
Console.WriteLine(json);

byte[] byteArray = Encoding.ASCII.GetBytes(json);
MemoryStream stream = new MemoryStream(byteArray);

service.AddFile(fileName, stream);

Console.WriteLine("App finished running at " + DateTimeOffset.UtcNow.ToString());
}

我的 function.json 文件具有以下绑定(bind):

"bindings": [
{
"type": "timerTrigger",
"schedule": "0 0 0 */1 * *",
"useMonitor": true,
"runOnStartup": false,
"name": "myTimer"
}
],

我认为问题在于 runOnStartup 属性为 false,但这并不能解释为什么当我按下 Run 按钮时它不起作用门户网站。

最佳答案

更新:

根据您的情况,请注意 Azure 上没有 local.settings.json 文件。 local.settings.json 将照常发布到 Azure 应用程序设置。

应用程序设置在这里:

enter image description here

enter image description here

用于获取设置的代码应如下所示:

var config = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();
string conn1 = config["xxxxxxxxxxxxx"];
string conn2 = config["xxxxxxxxxxxxx"];

或者简单地说

Environment.GetEnvironmentVariable("xxxxxxxxxxxxx");

此外,

我注意到您在代码中使用了Console.WriteLine()。请注意,Console.WriteLine() 的索引不会显示在门户上。您需要使用 log.LogInformation() 来显示信息。

原始答案:

对于 Azure Function,许多事情都可以在本地运行。但部署到 Azure 时有很多事情需要注意。

您使用消费计划吗?或者你没有设置时区?这两个原因都会导致这个问题。

看看这个 Offcial doc .

关于c# - Azure函数应用程序: TimerTrigger not Firing when Deployed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59476052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com