サービス指向アーキテクチャへの移行に伴い、現在のキューの代わりとして Windows Azure Service Bus の使用について調査を開始しました。
ドキュメントのほとんどは明確です。BrokeredMessage
ただし、ボディが提供されている場合、どのタイプのシリアル化を使用するかを確認するのに苦労しています。
たとえば、次のようにBrokeredMessage
オブジェクトをインスタンス化するとします。
ICommand sendMessageCommand = new SendMessageCommand
{
Title = "A new message title",
Body = "A new message body"
};
BrokeredMessage brokeredMessage = new BrokeredMessage(sendMessageCommand);
queueClient.Send(brokeredMessage);
SendMessageCommand
[Serializable]
属性でマークされた単純な DTOです。私たちの古いキューでは、これはバイナリ シリアル化されていたため、より高速に格納でき、メタ データを保持できました。これは、キューを使用して、ここで概説したパターンを使用してコマンドを送信し、受信側のワーカー ロールがジェネリックと動的型付けを組み合わせてコマンドを逆シリアル化するため、私たちにとって重要です。
ただし、この記事によると、コンストラクターに渡される本体BrokeredMessage
は「バイナリ XML シリアル化」です。私の仮定では、これは標準の XML シリアライゼーションであり、バイナリ フォーマッタを介して渡されますが、それは正しいですか?
これに加えて; それは、デフォルトのBrokeredMessage
メッセージ本文機能を使用する場合、ということですか。存在するすべての問題を含め、すべてのオブジェクトが XML シリアライズ可能であることを確認する必要がありますか? (プライベート フィールドの損失、ジェネリックを使用した逆シリアル化のためのメタ データなし、xml シリアル化属性)
ついに; このような場合は; これを回避する簡単な方法はありますか?独自のバイナリ シリアライゼーションを実行してbyte[]
から、 のプロパティに を格納することを検討していましたBrokeredMessage
。