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

标签 azure asp.net-core .net-core azureservicebus servicebus

我正在将 .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/

相关文章:

c# - Renci.SshNet:在30000毫秒内建立连接失败

unit-testing - 升级到 .NET Core 3.1 后,Moq 验证未按预期工作

c# - 从部署的 Web 应用程序调用时,Azure 函数应用程序不会触发

c# - 如何从 jwt token 获取用户 ID?

c# - @Html.IsSelected 的 ASP.NET Core 等效项是什么

c# - 退出时设置当前工作目录 (.NET Core)

python - 使用 Azure Active Directory B2C 中的签名验证 ID token

Azure DevOps 项目 SharePoint 门户 : Document Repository

c# - Azure Webjob在0秒后重新启动。为什么?

c# - EF Core FK 对备用键的约束