我正在将 .NET Core 2 用于需要将消息放在服务总线上并由旧版 .NET 4.6 接收器读取的应用程序。接收器也监听来自其他遗留应用程序的消息。
旧发件人:
UserData obj = new UserData()
{
id = 1,
name = "Alisha"
};
BrokeredMessage message = new BrokeredMessage(consentInstated);
_client.Send(message);
旧版接收器:
var dataObj = objBrokeredMessage.GetBody<UserData>();
businessFunc(dataObj.id, dataObj.name);
.NET Core 2 发送方: 如 https://stackoverflow.com/a/45069423/1773900 中所述
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);
但是,接收方无法反序列化消息并抛出以下错误
System.Runtime.Serialization.SerializationException: There was an error deserializing the object of type UserData. The input source is not correctly formatted. ---> System.Xml.XmlException: The input source is not correctly formatted.
如何才能使两个发送器与同一个接收器一起工作?
最佳答案
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());
关于Azure 服务总线 - 使用 BrokeredMessage.GetBody 读取 .NET Core 2 发送的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47427361/