azure - 通过 HTTP 端点触发时,带有 enqueueTimeUtc 参数的 ServiceBusTrigger 失败
问题描述
我正在使用 Visual Studio 2017 在本地 Azure Functions v1 中开发服务总线触发器。我想测试官方文档中的示例,而不必在服务总线中放置消息。所以我通过 Postman 在端点 POST http://localhost:7071/admin/functions/ServiceBusQueueTriggerCSharp和 body触发它{ "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}");
}
解决方案
截至目前,如果您希望能够使用这些额外的元数据属性,您将需要使用真实的服务总线消息。
理论上,管理端点可以足够智能,允许您将额外的绑定数据(例如本例中的 deliveryCount)作为查询参数传递。我提交了以下功能请求以进行跟踪: https ://github.com/Azure/azure-functions-host/issues/2955
推荐阅读
- apache-spark - 多个方法上的单个数据帧并行执行
- c# - 非控制器类无法访问 DbContext
- oauth - 如何在不刷新 OAuth 2.0 用户令牌的情况下查询 Google Sheets API?
- android - 完成 Querysnapshot 任务后如何启动新的 Intent?
- django - 如何在 django 模型中调整图像文件的大小
- matlab - 每 100m 等值线图标签
- r - 为什么在 Power BI 中运行我的 R 代码时收到这些错误消息?
- javascript - 将内部包含数组的对象数组更改为一个对象
- spring-boot - 我收到 SSL 异常 - “java.security.cert.CertificateException:找不到与 IP 地址 XXXX 匹配的主题替代名称”
- java - 使用泛型类型使 Field.get 类型安全