サービス指向アーキテクチャーに移行する際、現在のキューの代わりにWindows Azure Service Busの使用方法を調査し始めました。Azureサービスバスのシリアル化タイプ
ほとんどのドキュメントは明確です。しかし、身体が提供されたときにどのタイプのシリアライゼーションが使用されているかを確認するのは苦労しました。例えば
、のは、私は以下のようBrokeredMessage
オブジェクトのインスタンスを作成しましょう:
ICommand sendMessageCommand = new SendMessageCommand
{
Title = "A new message title",
Body = "A new message body"
};
BrokeredMessage brokeredMessage = new BrokeredMessage(sendMessageCommand);
queueClient.Send(brokeredMessage);
SendMessageCommand
は、単純なDTOは[Serializable]
属性でマークされています。私たちの古いキューでは、これはバイナリシリアル化されているため、より速く格納でき、メタデータが保持されます。これは、キューを使用して、pattern outlined hereを使用してコマンドを送信する際に、ジェネリックスと動的タイピングを混在させてコマンドをデシリアライズする受信ワーカーロールを使用する場合に重要です。
のコンストラクタに渡されるボディは、THISの記事によれば、 "Binary XML Serialized"です。私の前提は、これがバイナリフォーマッタを通過した標準のXMLシリアル化であるということです。
さらに、つまり、デフォルトのBrokeredMessage
メッセージ本文機能を使用する場合は、私はすべてのオブジェクトがXML Serializableであることを保証しなければならないでしょう、それはすべての問題を含んでいますか? (プライベートフィールドの喪失、ジェネリックを使用したデシリアライズのためのメタデータなし、xmlシリアル化属性)
最後に、このような場合は;この周りに簡単な方法がありますか?私は独自のバイナリシリアル化を行い、BrokeredMessage
のプロパティにbyte[]
を格納することを検討していました。
ベストプラクティスリンクが無効です – MPavlak
[Azure-Samples GitHubリポジトリ](https://github.com/Azure-Samples/azure-servicebus-messaging-samples)の例の多くは、動的オブジェクトでJSONシリアライゼーションを使用しています。私は、DataContractとDataMemberの属性を使ってモデルを捨てる必要がないので、静的オブジェクトの場合でもこのアプローチを好む。 –