代码之家  ›  专栏  ›  技术社区  ›  Thomas Schreiter

通过http端点触发时,带有enqueuetimeutc参数的servicebustrigger失败

  •  3
  • Thomas Schreiter  · 技术社区  · 6 年前

    我正在用visual studio 2017在azure函数v1本地开发一个服务总线触发器。我想测试一下 example 不需要在服务总线中输入消息的官方文档。所以我在终点站通过邮递员触发它 http://localhost:7071/admin/functions/ServiceBusQueueTriggerCSharp 用身体 { "input": "foo" } .

    此操作失败,出现脚本主机错误: 执行函数时发生异常:ServiceBusQueueTriggercSharp。Microsoft.azure.webjobs.host:发生一个或多个错误。异常绑定参数'DeliveryCount'。Microsoft.azure.webjobs.host:绑定数据不包含预期值“DeliveryCount”。

    我试着把 deliveryCount 争论,但是在 enqueueTimeUtc . 去掉它也行。有没有办法保留这些参数并在本地测试函数?

    我知道,当通过http触发时,这两个参数没有多大意义,但可以为它们提供默认值。 messageId 具有非零值。

    参考示例:

    [FunctionName("ServiceBusQueueTriggerCSharp")]                    
    public static void Run(
        [ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "ServiceBusConnection")] 
        string myQueueItem,
        Int32 deliveryCount,       // this fails
        DateTime enqueuedTimeUtc,  // this fails too
        string messageId,
        TraceWriter log)
    {
        log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
        log.Info($"EnqueuedTimeUtc={enqueuedTimeUtc}");
        log.Info($"DeliveryCount={deliveryCount}");
        log.Info($"MessageId={messageId}");
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Paul Batum    6 年前

    从现在起,如果希望能够使用这些附加的元数据属性,则需要使用真正的服务总线消息。

    理论上,管理端点可以足够聪明,允许您将其他绑定数据(如本例中的deliverycount)作为查询参数传递。我提交了以下功能请求以跟踪: https://github.com/Azure/azure-functions-host/issues/2955