你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
MessageInteropExtensions 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
消息扩展类,提供扩展方法,以反序列化使用 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 序列化的消息的正文 |