首页 文章

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

提问于
浏览
3

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

Binding

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

Timer Function

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!";
        }
    }
}

Error Message

TimerTriggerCSharp:Microsoft.Azure.WebJobs.Host:错误索引方法'Functions.TimerTriggerCSharp' . Microsoft.Azure.WebJobs.Host:无法将参数'msg'绑定到String& . 确保绑定支持参数Type . 如果您正在使用绑定扩展(例如ServiceBus,Timers等),请确保您已在启动代码中调用扩展的注册方法(例如config.UseServiceBus(),config.UseTimers()等) .

我错过了设置中的一个步骤,或者Service Bus绑定是否真的不支持 out 参数的字符串

1 回答

  • 5

    看起来你错过了 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
       }
    }
    

相关问题