7

我创建了一个Azure 函数,只要将新消息添加到 Azure ServiceBus 队列就会触发该函数。使用此代码可以正常工作:

#r "Newtonsoft.Json"
#load "..\shared\person.csx"

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;

public static void Run(string message, TraceWriter log)
{
    var person = JsonConvert.DeserializeObject<Person>(message, 
            new JsonSerializerSettings() {ContractResolver = new CamelCasePropertyNamesContractResolver()});
    log.Verbose($"From DeserializeObject: {person.FirstName} {person.LastName}");
}

我已经看到我也可以将消息绑定到这样的 POCO:

public static void Run(Person message, TraceWriter log)
{
    log.Verbose($"From DeserializeObject: {message.FirstName} {message.LastName}");
}

现在我想将消息绑定到 aBrokeredMessage因为我需要访问消息的属性。

4

2 回答 2

16

编辑新 SDK 支持使用 servicebus sdk#r directive

#r "Microsoft.ServiceBus"
using Microsoft.ServiceBus.Messaging;

public static void Run(BrokeredMessage msg, TraceWriter log)
{
    log.Info($"C# ServiceBus queue trigger function processed message: {msg}");
}

旧版

只需两步:

我创建了一个project.json文件来添加对WindowsAzure.ServiceBusNuget 包的引用(请参阅SO Post):

{
    "frameworks": {
        "net46":{
            "dependencies": {
                "WindowsAzure.ServiceBus": "2.7.6"
            }
        }
    }
}

我添加了对代理消息的引用:

using Microsoft.ServiceBus.Messaging;

public static void Run(BrokeredMessage  message, TraceWriter log)
{
    log.Verbose("Function has been triggered !!!");
}
于 2016-04-19T01:43:30.137 回答
2

我尝试了托马斯的解决方案,似乎这不再起作用了。

文档指出:

此外,以下程序集是特殊的,可以通过 simplename 引用(例如 #r "AssemblyName"):

  • ...
  • 微软服务总线

因此,在不触及 project.json 文件的情况下,以下工作:

#r "Microsoft.ServiceBus"

using Microsoft.ServiceBus.Messaging;

public static void Run(BrokeredMessage msg, TraceWriter log)
{
    log.Info($"C# ServiceBus queue trigger function processed message: {msg}");
}
于 2017-01-10T12:15:33.740 回答