我有一个通过TimerTrigger(美国东部标准时间每天午夜)运行的Azure功能应用程序(v2)。当我在Visual Studio中本地运行它时,它工作正常。但是,当我使用内置的Visual Studio发布工具将其直接发布到Function App(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文件具有以下绑定:
"bindings": [
{
"type": "timerTrigger",
"schedule": "0 0 0 */1 * *",
"useMonitor": true,
"runOnStartup": false,
"name": "myTimer"
}
],
我当时想的问题是runOnStartup
属性为false,但这并不能解释为什么当我按下门户中的Run
按钮时,该属性不起作用。
答案 0 :(得分:1)
更新:
根据您的情况,请注意Azure上没有local.settings.json
文件。 local.settings.json
将照常发布到Azure应用程序设置。
应用程序设置在这里:
用于设置的代码应如下所示:
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。
答案 1 :(得分:1)
如果您已经在appsettings中配置了存储帐户,我的第一条建议是将您的Console
方法更改为ILogger
方法,因为Console.WriteLine
无法在日志控制台中写入日志使用log.LogInformation
。
第二,如果您更改了方法,但是天蓝色仍然无法输出任何日志,请转到Kudu网站检查日志文件,在那里您可以获得详细的文件。
文件位置应为D:\home\LogFiles\Application\Functions\Host
,检查最新的日志文件。
答案 2 :(得分:0)