【问题标题】:Azure Event Grid / Function / ngrokAzure 事件网格/函数/ngrok
【发布时间】:2018-09-25 07:58:02
【问题描述】:

我正在尝试按照说明进行操作 Local Testing with ngrok

我的事件网格正在运行,我的函数使用 C# 示例在本地 VS 中运行。但是,当我尝试使用端点订阅我的事件时

https://xxxx.ngrok.io/admin/extensions/EventGridExtensionConfig?functionName=EventGridTrigger

我的本​​地 ngrok 控制台显示:

POST /admin/extensions/EventGridExtensionConfig 404 Not Found

VS中的函数代码:

  [FunctionName("EventGridTrigger")]
    public static void Run([EventGridTrigger]EventGridEvent eventGridEvent, TraceWriter log)
    {
        log.Info(eventGridEvent.Data.ToString());
    }

【问题讨论】:

    标签: azure azure-functions azure-eventgrid


    【解决方案1】:

    显然微软发布的documentation有错误。 ngrok 示例适用于函数 v1。如果您使用的是函数 v2,那么这是触发函数所需的 URL:

    https://{subdomain}.ngrok.io/runtime/webhooks/EventGridExtensionConfig?functionName={functionName}
    

    查看记录的问题here

    【讨论】:

    • 很抱歉给您带来麻烦。刚刚向我们的文档仓库添加了一个 PR,以确保 V2 端点也被捕获。
    【解决方案2】:

    根据您的描述,必须使用以下属性:

    [FunctionName("EventGridTrigger")]
    

    您可以使用 Postman 对其进行测试:

    http://localhost:7071/admin/extensions/EventGridExtensionConfig?functionName=EventGridTrigger 
    

    注意,必须添加以下标题:

    Aeg-Event-Type:Notification
    

    更新:

    以下是我通过 ngrok 和 VS 2017 版本 15.7.5 创建的自定义主题的工作功能:

    // This is the default URL for triggering event grid function in the local environment.
    // http://localhost:7071/admin/extensions/EventGridExtensionConfig?functionName={functionname} 
    // Aeg-Event-Type:Notification
    
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Azure.WebJobs.Extensions.EventGrid;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    
    namespace FunctionApp10
    {
        public static class Function2
        {
            [FunctionName("Function2")]
            public static void Run([EventGridTrigger]JObject eventGridEvent, TraceWriter log)
            {
                log.Info(eventGridEvent.ToString(Formatting.Indented));
            }
        }
    }
    

    以及依赖项:

    更新2:

    VS从EventGridTrigger模板生成的版本2的函数如下:

    // Default URL for triggering event grid function in the local environment.
    // http://localhost:7071/runtime/webhooks/EventGridExtensionConfig?functionName={functionname}
    // Aeg-Event-Type:Notification
    
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Azure.EventGrid.Models;
    using Microsoft.Azure.WebJobs.Extensions.EventGrid;
    using Microsoft.Extensions.Logging;
    
    namespace FunctionApp11
    {
        public static class Function2
        {
            [FunctionName("Function2")]
            public static void Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
            {
                log.LogInformation(eventGridEvent.Data.ToString());
            }
        }
    }
    

    以及依赖项:

    注意 localhost:7071 邮递员测试:

    有效负载必须是事件数组

    【讨论】:

    • 已编辑问题以显示我的功能。,按照您的建议进行装饰。如果我 POST 到 localhost:7071,我会得到“您的 Azure 功能已启动并正在运行”。但是,使用我们都认为应该有效的 URL(使用您建议的标头)无法返回任何内容。
    • 这使用函数 SDK v1 工作。我使用的是 v2 - 请参阅上面的解决方案
    • 通过VS创建一个EventGridTrigger函数,模板生成的代码在注释行显示url本地地址(localhost:7071)。一切都对我有用,我可以通过 ngrok 和 localhost:7071 运行。因此,基于此注释和 AF 版本,可以正确填充目标 endpointUrl 以进行本地调试。
    【解决方案3】:

    对于函数 2.x,URL 是 https://{subdomain}.ngrok.io/runtime/webhooks/eventgrid?functionName={functionName}。

    请参阅docs

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 2018-12-12
      • 2022-01-15
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      相关资源
      最近更新 更多