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:输入源的格式不正确。
如何使两个发送方与同一接收方一起工作?
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)