Compartir a través de


MessageInteropExtensions Clase

Definición

Clase de extensión de mensaje que proporciona métodos de extensión para deserializar el cuerpo de un mensaje que se serializó y se envió a ServiceBus Queue/Topic mediante la biblioteca cliente WindowsAzure.Messaging. La biblioteca cliente WindowsAzure.Messaging serializa objetos mediante el Microsoft.Azure.ServiceBus.InteropExtensions.DataContractBinarySerializer (serializador predeterminado) o DataContractSerializer al enviar un mensaje. Esta clase proporciona métodos de extensión para deserializar y recuperar el cuerpo de estos mensajes.

public static class MessageInteropExtensions
type MessageInteropExtensions = class
Public Module MessageInteropExtensions
Herencia
MessageInteropExtensions

Comentarios

1. Si solo se envía y recibe un mensaje con esta biblioteca cliente Microsoft.Azure.ServiceBus, los métodos de extensión siguientes no son relevantes y no deben usarse.

2. Si esta biblioteca cliente se usará para recibir mensajes enviados mediante la biblioteca cliente WindowsAzure.Messaging y esta biblioteca (Microsoft.Azure.ServiceBus), los usuarios deben agregar una propiedad UserProperties User al enviar el mensaje. Al recibir el mensaje, esta propiedad se puede examinar para determinar si el mensaje procede de la biblioteca cliente WindowsAzure.Messaging y, si es así, use el mensaje. Método de extensión GetBody() para obtener el cuerpo real asociado al mensaje.

---------------------------------------------- Escenarios para usar el método de extensión GetBody: ---------------------------------------------- Si el mensaje se construyó mediante la biblioteca cliente WindowsAzure.Messaging de la siguiente manera:

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);

A continuación, recupere los objetos originales mediante esta biblioteca cliente como se indica a continuación: (De forma predeterminada Microsoft.Azure.ServiceBus.InteropExtensions.DataContractBinarySerializer , se usará para deserializar y recuperar el cuerpo. Si se usa un serializador que no sea , pase explícitamente el serializador).

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)}");

------------------------------------------------- Escenarios para NO usar el método de extensión GetBody: ------------------------------------------------- Si se envió el mensaje mediante la biblioteca cliente WindowsAzure.Messaging de la siguiente manera: var message4 = new BrokeredMessage(new MemoryStream(New MemoryStream(Encoding.UTF8.GetBytes("contoso"))); await messageSender.SendAsync(message4);

A continuación, recupere los objetos originales con esta biblioteca cliente de la siguiente manera: var message4 = await messageReceiver.ReceiveAsync(); string devuelto = Encoding.UTF8.GetString(message4. Cuerpo); Puesto que el mensaje se envió como Stream, no se requiere deserialización aquí.

Métodos

GetBody<T>(Message, XmlObjectSerializer)

Deserializa el cuerpo de un mensaje que se serializó mediante XmlObjectSerializer

Se aplica a