你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

MessageInteropExtensions 类

定义

消息扩展类,提供扩展方法,以反序列化使用 WindowsAzure.Messaging 客户端库序列化并发送到 ServiceBus 队列/主题的消息正文。 WindowsAzure.Messaging 客户端库使用 Microsoft.Azure.ServiceBus.InteropExtensions.DataContractBinarySerializer (默认序列化程序) 或在 DataContractSerializer 发送消息时序列化对象。 此类提供用于反序列化和检索此类消息正文的扩展方法。

public static class MessageInteropExtensions
type MessageInteropExtensions = class
Public Module MessageInteropExtensions
继承
MessageInteropExtensions

注解

1. 如果仅使用此 Microsoft.Azure.ServiceBus 客户端库发送和接收消息,则以下扩展方法不相关,不应使用。

2. 如果此客户端库将用于接收使用 WindowsAzure.Messaging 客户端库和此 (Microsoft.Azure.ServiceBus) 库发送的消息,则用户需要在发送消息时添加 User 属性 UserProperties 。 接收消息时,可以检查此属性以确定消息是否来自 WindowsAzure.Messaging 客户端库,如果是,请使用消息。GetBody () 扩展方法,用于获取与消息关联的实际正文。

----------------------------------------------使用 GetBody 扩展方法的方案:----------------------------------------------如果消息是使用 WindowsAzure.Messaging 客户端库构造的,如下所示:

var message1 = new BrokeredMessage("contoso"); // Sending a plain string
var message2 = new BrokeredMessage(sampleObject); // Sending an actual customer object
var message3 = new BrokeredMessage(Encoding.UTF8.GetBytes("contoso")); // Sending a UTF8 encoded byte array object

await messageSender.SendAsync(message1);
await messageSender.SendAsync(message2);
await messageSender.SendAsync(message3);

然后,使用此客户端库检索原始对象,如下所示:默认情况下, Microsoft.Azure.ServiceBus.InteropExtensions.DataContractBinarySerializer (将用于反序列化和检索正文。如果使用的序列化程序以外的其他序列化程序,请显式传入序列化程序。)

var message1 = await messageReceiver.ReceiveAsync();
var returnedData1 = message1.GetBody<string>();

var message2 = await messageReceiver.ReceiveAsync();
var returnedData2 = message1.GetBody<SampleObject>();

var message3 = await messageReceiver.ReceiveAsync();
var returnedData3Bytes = message1.GetBody<byte[]>();
Console.WriteLine($"Message3 String: {Encoding.UTF8.GetString(returnedData3Bytes)}");

-------------------------------------------------方案不使用 GetBody 扩展方法:-------------------------------------------------如果消息是使用 WindowsAzure.Messaging 客户端库发送的,如下所示:var message4 = new BrokeredMessage (new MemoryStream (Encoding.UTF8.GetBytes (“contoso”) ) ) ;await messageSender.SendAsync (message4) ;

然后,使用此客户端库检索原始对象,如下所示:var message4 = await messageReceiver.ReceiveAsync () ;返回的字符串 = Encoding.UTF8.GetString (message4。正文) ;由于消息作为 Stream 发送,因此此处不需要反序列化。

方法

GetBody<T>(Message, XmlObjectSerializer)

反序列化使用 XmlObjectSerializer 序列化的消息的正文

适用于