Azure函数无法处理二进制Azure Servicebus消息

问题描述

或者如何获取Azure Functions来处理二进制Azure Servicebus消息。 这是我的Azure Functions方法

public static async Task RunAsync([ServiceBusTrigger("firstqueue",Connection = "AzureServicebusConnection")] Message myQueueItem,ILogger log)
{
    var deSerializedMessage = BinarySerializer.Deserialize(myQueueItem.Body);
    Console.WriteLine($"Received message: SequenceNumber:{myQueueItem} Body:{deSerializedMessage.GetType().FullName}");
}

如果我使用JSON序列化对象,然后将它们转换为字节数组,则Azure函数可以处理它们

string messageBody = JsonConvert.SerializeObject(command);
return Encoding.UTF8.GetBytes(messageBody);

但是如果我使用二进制序列化程序直接创建字节数组,Azure函数将无法处理

using (var memoryStream = new MemoryStream())
{
    var formatter = new BinaryFormatter();
    formatter.Serialize(memoryStream,command);
    return memoryStream.ToArray();
}

我收到以下错误消息。

执行功能时异常:CommandReceiver。 Microsoft.Azure.WebJobs.Host:异常绑定参数“ myQueueItem”。 Microsoft.Azure.WebJobs.ServiceBus:内容类型为'null'的消息无法反序列化为带有消息的字符串:'反序列化类型为System.String的对象时出错。输入源的格式不正确。 System.Private.DataContractSerialization:反序列化类型为System.String的对象时发生错误。输入源的格式不正确。 System.Private.DataContractSerialization:输入源的格式不正确。

如果我使用控制台应用程序读取队列,但是我想使用无服务器,则此二进制序列化程序可以工作。

似乎在发送消息时,我需要在消息上设置正确的内容类型,因此它没有尝试将其转换为字符串,但是我找不到该设置。或者,即使这是正确的解决方案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...