来自计时器触发器的 Azure 函数输出服务总线绑定



我正在运行Visual Studio 2017 Preview并在本地运行函数代码,并且正在使用开箱即用的Azure Function项目模板。我正在尝试让计时器触发的 Azure 函数使用输出绑定将消息发送到服务总线队列,但看起来 Web 作业 SDK 无法将输出绑定到字符串类型。

捆绑

"bindings": [
{
"type": "serviceBus",
"name": "msg",
"queueName": "myqueue",
"connection": "ServiceBusQueue",
"accessRights": "manage",
"direction": "out"
}
]

定时器功能

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
namespace MyFunctionApp
{
public static class TimerTrigger
{
[FunctionName("TimerTriggerCSharp")]
public static void Run([TimerTrigger("1 * * * * *", RunOnStartup = true)]TimerInfo myTimer, TraceWriter log, out string msg)
{
log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
msg = "Hello!";
}
}
}

错误信息

TimerTriggerCSharp: Microsoft.Azure.WebJobs.Host: Error indexing 方法'Functions.TimerTriggerCSharp'。Microsoft.Azure.WebJobs.Host: 无法将参数"msg"绑定到字符串&类型。确保参数 绑定支持类型。如果使用绑定扩展 (例如,ServiceBus、Timers 等(确保您已调用 启动代码中扩展的注册方法(例如 配置。UseServiceBus((, config.使用计时器((,等等(。

我是否缺少设置中的步骤,或者服务总线绑定是否真的不支持out参数的字符串

看起来您缺少ServiceBus的绑定属性。 我只使用了ICollector<T>类型而不是out string但无论哪种方式都无关紧要。

[FunctionName("TimerTriggerCSharp")]
public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer,
TraceWriter log,
[ServiceBus("%QueueName%", Connection = "ServiceBusConnection", EntityType = Microsoft.Azure.WebJobs.ServiceBus.EntityType.Queue)] out string msg)
{
msg = "My message";
}

要使用VS2017预览版工具在本地运行,还需要local.settings.json中定义的以下本地设置,以匹配ServiceBus属性。

{
"Values": {
"ServiceBusConnection" : "Endpoint=sb://.....your connection",
"QueueName": "my-service-bus-queue
}
}

最新更新