如何在Azure功能2中访问azure服务总线消息属性

时间:2018-04-16 15:19:33

标签: c# azure-functions azureservicebus azure-servicebus-topics

使用azure函数版本1可以接受消息为BrokeredMessage。

public static void Run([ServiceBusTrigger("MySServiceBus", "MySubscriptionName", AccessRights.Listen, Connection = "MyConnectionString")]BrokeredMessage message, TraceWriter log)

然后使用与此类似的代码检索属性:

var MyProperty = message.Properties["MyMessageProperty"] as string

使用函数SDK的2.0版我无法在不收到反序列化错误消息的情况下将传入对象强制转换为BrokeredMessage

  

反序列化类型对象时出错   Microsoft.ServiceBus.Messaging.BrokeredMessage。输入源是   格式不正确。 System.Private.DataContractSerialization:The   输入源格式不正确。

是否可以使用函数2.0

获取消息属性

2 个答案:

答案 0 :(得分:3)

运行时版本2.0切换到new Service Bus client library based on .NET Standard

BrokeredMessage类不属于该库,而是具有Message类,具有相似的功能但API不同。

您应该能够将输入参数绑定到此类,然后通过Message.UserProperties字典访问自定义属性。

答案 1 :(得分:0)

在新世界(azure 函数 .net5)中,您不能再使用代理消息。新的图书馆不能满足它。

函数应用声明不再是[FunctionName=]而是[Function= 您不能再接收 Message 或字节,而只能接收字符串。

示例:

 [Function("TestFA")]
 public async Task Run([ServiceBusTrigger(topicName, subscriberName, Connection = ???)] string messageText, string id,  FunctionContext executionContext)

魔法现在在 FunctionContext executionContext 你可以从中获得属性 例如

KeyValuePair<string, object> props = executionContext.BindingContext.BindingData.Where(x => x.Key == "UserProperties").FirstOrDefault();