You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure TimerTrigger函数无法运行,测试时返回404错误

Azure TimerTrigger函数部分无法运行(返回404)问题排查

问题描述

多个基于TimerTrigger的C# Azure函数,本地运行正常,但部署到Azure后部分函数无法运行:

  • 测试异常函数时返回404错误,对应请求路径为/admin/functions/tableTimer
  • 异常函数无任何日志记录
  • Kudu中查看两个函数的function.json均显示正常,配置无明显差异

正常运行的函数示例

[FunctionName("formsTimer")]
public static async Task FormJob([TimerTrigger("*/15 * * * *", RunOnStartup = false)] TimerInfo timerInfo, ILogger log)
{
    // 函数逻辑
}

无法运行的函数示例(位于不同类中)

[FunctionName("tableTimer")]
public static async Task TableJob([TimerTrigger("*/30 * * * *", RunOnStartup = false)] TimerInfo timerInfo, ILogger log)
{
    // 函数逻辑
}

两个函数的function.json内容

formsTimer的function.json

{
  "generatedBy": "Microsoft.NET.Sdk.Functions.Generator-4.0.1",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "timerTrigger",
      "runOnStartup": false,
      "schedule": "*/15 * * * *",
      "useMonitor": true,
      "name": "timerInfo"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/TimerFunctions.dll",
  "entryPoint": "TimerFunctions.Functions.Class1.FormJob"
}

tableTimer的function.json

{
  "generatedBy": "Microsoft.NET.Sdk.Functions.Generator-4.0.1",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "timerTrigger",
      "runOnStartup": false,
      "schedule": "*/30 * * * *",
      "useMonitor": true,
      "name": "timerInfo"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/TimerFunctions.dll",
  "entryPoint": "TimerFunctions.Functions.Class2.TableJob"
}

排查与解决步骤

1. 检查类与方法的访问权限

确保无法运行的函数所在的类是public修饰的,方法本身也是public static:

  • 确认Class2的定义为public class Class2,避免因类的访问级别导致运行时无法加载函数。

2. 验证命名空间与大小写匹配(针对Linux计划)

如果函数应用运行在Linux计划上,文件系统区分大小写,需确保function.json中的entryPoint与代码中的命名空间、类名、方法名完全一致(包括大小写):

  • 核对代码中的命名空间是否为TimerFunctions.Functions,类名是否为Class2,方法名是否为TableJob,无拼写或大小写错误。

3. 检查部署文件完整性

  • 在Kudu的「Debug Console」→「CMD」中进入site\wwwroot\bin目录,确认TimerFunctions.dll存在且为最新部署版本。
  • 执行强制重新部署:本地运行func azure functionapp publish <你的函数应用名称> --force,覆盖旧的部署文件。

4. 检查应用设置中的函数禁用配置

Azure应用设置中的AzureWebJobs.<函数名>.Disabled会覆盖function.json中的disabled配置:

  • 在Azure门户进入函数应用的「配置」→「应用程序设置」,检查是否存在AzureWebJobs.tableTimer.Disabled且值为true,若有则删除或改为false。

5. 核对运行时与扩展包版本

确保项目的Microsoft.NET.Sdk.Functions版本与Azure函数应用的运行时版本兼容:

  • 在Azure门户查看函数应用的「配置」→「函数运行时设置」,确认.NET版本与本地项目一致。
  • 更新项目中的Microsoft.NET.Sdk.Functions和相关扩展包到与运行时匹配的版本,重新部署。

6. 重启函数应用刷新缓存

Azure Functions运行时可能缓存旧的函数列表,重启可强制刷新:

  • 在Azure门户的函数应用「概述」页面点击「重启」按钮;
  • 或在Kudu的「Debug Console」→「PowerShell」中执行:
    Invoke-RestMethod -Method Post -Uri https://<你的函数应用名称>.scm.azurewebsites.net/admin/restart
    

内容的提问来源于stack exchange,提问作者Rob Sedgwick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:47:35