当前位置: 首页 > 知识库问答 >
问题:

在本地运行一次计时器触发的Azure函数的最简单方法是什么?

简培
2023-03-14

我有一些C#Azure函数,它们使用定时器触发器按计划运行。我是这样设置的,%TimerSchedule%引用应用程序设置中的cron表达式:

public static void Run([TimerTrigger("%TimerSchedule%")]TimerInfo myTimer, TraceWriter log)

在开发过程中,我经常希望使用 Azure Functions Tools for Visual Studio Azure Functions Core Tools 在本地运行函数。但是当我按 F5 在本地调试函数时,它(通常)不会立即运行。相反,它开始根据计时器计划等待下一次发生。例如,如果我的 cron 表达式说每天晚上 8 点运行,我必须等到晚上 8 点,函数才能在我的机器上实际运行。

所以我的问题是:让一个函数在本地运行一次,最简单最好的方法是什么?

我已经尝试或考虑过的事情:

  • 为本地开发使用更频繁的定时器时间表
    • 这很好,但并不完美——除非非常频繁,否则您仍然需要等待一点,如果非常频繁,则函数可能会运行多次。这就是我现在正在做的
    • 这不是100%直接的,因为你必须向Run()提供TimerInfoTraceWriter参数 - 我发现令人惊讶的很少的文档。

    Microsoft在Azure Functions页面中测试代码的策略对此主题没有太大帮助-它只提到计时器触发器作为测试其他触发器类型的一种方式。

    在一个完美的世界里,我点击F5,这个函数会立即运行一次——就像开发一个“普通”一样。NET应用程序。

共有3个答案

敖淮晨
2023-03-14

从…起https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local?tabs=windows,csharp,bash#非http触发函数

对于除HTTP触发器和webhooks之外的所有类型的函数,您可以通过调用管理endpoint来本地测试您的函数。在本地服务器上用HTTP POST请求调用此endpoint会触发该函数。您可以选择在POST请求的主体中将测试数据传递给执行。该功能类似于Azure门户中的测试选项卡。

您可以调用以下管理员endpoint来触发非HTTP函数:

http://localhost:{port}/admin/functions/{function_name}

要将测试数据传递给函数的管理员endpoint,您必须在POST请求消息的主体中提供数据。消息正文必须采用以下JSON格式:

{
    "input": "<trigger_input>"
}
通博实
2023-03-14

您也许可以使用此处记录的RunOnStartup标志。它并不完全符合您关于它只运行一次的要求,但它至少应该在应用程序启动后在本地执行它。

/// Gets or sets a value indicating whether the function should be invoked
/// immediately on startup. After the initial startup run, the function will
/// be run on schedule thereafter.

使用属性绑定的示例:

[TimerTrigger(“%TimerSchedule%”, RunOnStartup = true)]TimerInfo myTimer

爱繁
2023-03-14

我也有同样的问题,只在调试时使用DEBUG-flag让RunOnStartup运行:

        public static void Run(
            [TimerTrigger("* 0 7 * * 1-5"
#if DEBUG
            , RunOnStartup=true
#endif
            )]TimerInfo myTimer, TraceWriter log)
        {
 类似资料:
  • 我在Visual Studio中创建了一个简单的blob触发器,init.py如下 function.json如下 local.settings。json如下所示 此代码在本地计算机上的visual studio中运行良好。但在azure portal上发布时,它无法从函数中读取blob路径。json并给出错误为 我已经使用命令发布了local.settings.json的contains。 .有

  • 问题内容: jQuery,如何每5秒调用一次函数。 我正在寻找一种自动化幻灯片显示中图像更改的方法。 如果可能的话,我宁愿不安装其他任何第三方插件。 问题答案: 为此,您不需要jquery,使用简单的javascript即可! 要停止循环,您可以使用

  • 我正在尝试在本地运行一个azure队列触发函数。我安装了Azure Storage Emulator并运行命令“AzureStorageEmulator.exe init”以在“(localdb)\mssqllocaldb”服务器上创建“AzureStorageEmulatorDB59”数据库。 在具有队列触发器函数的azure functions项目中,我有一个local.settings.js

  • 我在C#中设置了一个非常简单的Azure函数来响应。当我按照Microsoft Azure指令在本地运行该函数时,我得到的只是一个空的404响应。 我用的是Visual Studio 2017 v15.3预览版,安装了Azure Function Tools扩展。这是我的Azure函数的代码: 当我在本地运行时(通过右键单击VS项目并进行调试) 但是,当我获取或POST到上述URL(将Conten

  • 最好的方法是什么?JCUDA是一个完美的映射到C CUDA还是完全不同?或者从Java调用C代码并共享结果是否有意义(链接列表是否可以访问)?

  • 我们正在构建一个系统,一些客户将在Azure中运行,一些客户将通过docker-compose在他们自己的硬件上在Docker中运行。我们的微服务基于Azure Functions。 我已经编写了一个docker compose文件来设置各种图像(网站、Azure函数和RabbitMQ) docker compose如下所示(简化): 当docker-comuse启动时,我在Azure Funct