Azure服务总线-使用BrokeredMessage.GetBody读取.NET Core 2发送的消息

loh*_*hul 3 servicebus azure azureservicebus .net-core asp.net-core

我正在将.NET Core 2用于需要将消息放在Service总线上并由旧版.NET 4.6接收器读取的应用程序。接收者也收听来自其他传统应用程序的消息。

旧版寄件者:

UserData obj = new UserData()
{
  id = 1,
  name = "Alisha"
};
BrokeredMessage message = new BrokeredMessage(consentInstated);
_client.Send(message);
Run Code Online (Sandbox Code Playgroud)

旧版接收器:

var dataObj = objBrokeredMessage.GetBody<UserData>();
businessFunc(dataObj.id, dataObj.name);
Run Code Online (Sandbox Code Playgroud)

.NET Core 2发件人:/sf/answers/3154859641/中所述

var ser = new System.Runtime.Serialization.DataContractSerializer(typeof(UserData));
var ms = new MemoryStream();
ser.WriteObject(ms, objUserData);
var message = new Message(ms.ToArray());
_client.Send(message);
Run Code Online (Sandbox Code Playgroud)

但是,收件人无法反序列化该消息并引发以下错误

System.Runtime.Serialization.SerializationException:反序列化UserData类型的对象时发生错误。输入源的格式不正确。---> System.Xml.XmlException:输入源的格式不正确。

如何使两个发送方与同一接收方一起工作?

Mik*_*kov 6

BrokeredMessage正在使用XML Binary Reader反序列化消息。因此,您的发送部分应如下所示:

var ser = new DataContractSerializer(typeof(UserData));
var ms = new MemoryStream();
XmlDictionaryWriter binaryDictionaryWriter = XmlDictionaryWriter.CreateBinaryWriter(ms);
ser.WriteObject(binaryDictionaryWriter, obj);
binaryDictionaryWriter.Flush();
var message = new Message(ms.ToArray());
Run Code Online (Sandbox Code Playgroud)

  • 接收者现在可以解析对象,但是它会丢失值,并且所有属性都设置为null (2认同)