次の方法で共有


MessageInteropExtensions クラス

定義

WindowsAzure.Messaging クライアント ライブラリを使用して ServiceBus キュー/トピックにシリアル化および送信されたメッセージの本文を逆シリアル化する拡張メソッドを提供するメッセージ拡張クラス。 WindowsAzure.Messaging クライアント ライブラリは、 (既定のシリアライザー) を使用するかMicrosoft.Azure.ServiceBus.InteropExtensions.DataContractBinarySerializerDataContractSerializer、メッセージを送信するときにオブジェクトをシリアル化します。 このクラスは、このようなメッセージの本文を逆シリアル化および取得するための拡張メソッドを提供します。

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 Extension メソッドを使用するシナリオ: ----------------------------------------------次のように、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 Extension メソッドを使用しないシナリオ: -------------------------------------------------次のように WindowsAzure.Messaging クライアント ライブラリを使用してメッセージが送信された場合: var message4 = new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes("contoso")));await messageSender.SendAsync(message4);

次に、このクライアント ライブラリを使用して元のオブジェクトを次のように取得します。var message4 = await messageReceiver.ReceiveAsync();string returned = Encoding.UTF8.GetString(message4.本文);メッセージは Stream として送信されたため、ここでは逆シリアル化は必要ありません。

メソッド

GetBody<T>(Message, XmlObjectSerializer)

XmlObjectSerializer を使用してシリアル化されたメッセージの本文を逆シリアル化します

適用対象