能否用ServiceBusMessage发送数据,以BrokeredMessage接收?跨.NET版本适配
跨SDK兼容:Azure.Messaging.ServiceBus 发送至 WindowsAzure.ServiceBus 接收
核心兼容逻辑:Azure.Messaging.ServiceBus 与 WindowsAzure.ServiceBus 基于同一Service Bus服务协议,只要保证消息核心格式一致,即可实现跨SDK收发,关键需确保消息的Body格式和属性传递兼容。
发送端(.NET Core 8.0)代码示例:
使用Azure.Messaging.ServiceBus发送时,将消息内容序列化为字节数组作为Body,避免SDK特定序列化方式,保证接收端可解析:using Azure.Messaging.ServiceBus; using System.Text; var connectionString = "你的Service Bus连接字符串"; var queueName = "目标队列名称"; await using var client = new ServiceBusClient(connectionString); ServiceBusSender sender = client.CreateSender(queueName); // 构造消息内容并序列化为字节数组 var messageContent = "业务数据内容"; byte[] bodyBytes = Encoding.UTF8.GetBytes(messageContent); var serviceBusMessage = new ServiceBusMessage(bodyBytes); // 添加自定义属性(可选) serviceBusMessage.ApplicationProperties.Add("CustomAttribute", "AttributeValue"); await sender.SendMessageAsync(serviceBusMessage);接收端(.NET Framework 4.8)代码示例:
使用WindowsAzure.ServiceBus的BrokeredMessage接收时,直接读取Body字节数组并反序列化:using Microsoft.ServiceBus.Messaging; using System.Text; var connectionString = "你的Service Bus连接字符串"; var queueName = "目标队列名称"; var queueClient = QueueClient.CreateFromConnectionString(connectionString, queueName); queueClient.OnMessage(message => { // 读取Body字节数组并转换为字符串 var bodyBytes = message.GetBody<byte[]>(); var messageContent = Encoding.UTF8.GetString(bodyBytes); // 读取自定义属性(可选) if (message.Properties.ContainsKey("CustomAttribute")) { var attributeValue = message.Properties["CustomAttribute"].ToString(); } });关键注意事项:
- 统一用字节数组传递消息Body,避免依赖SDK专属的自动序列化逻辑,确保两端解析一致。
- 自定义属性仅使用基础数据类型(字符串、数字、布尔值等),不要传递复杂对象。
- 若使用会话消息,需保证两端均开启会话支持,且SessionId完全匹配。
内容的提问来源于stack exchange,提问作者eugen_nw
相关产品推荐
相关产品推荐

