3

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

绑定

"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:错误索引 方法'Functions.TimerTriggerCSharp'。 Microsoft.Azure.WebJobs.Host: 无法绑定参数'msg'来键入字符串&。确保绑定支持参数 类型。如果您使用绑定扩展 (例如ServiceBus,Timers等),请确保您已在启动代码中为扩展名调用 注册方法(例如 config.UseServiceBus(),config.UseTimers( )等)。

我缺少的设置步骤,或做服务总线绑定真的不支持的out参数

回答

3

它看起来像你缺少的绑定属性为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 
    } 
} 
相关问题