Мы начали расследование использования служебной шины Windows Azure в качестве замены для наших текущих очередей, когда мы продвигаемся к ориентированной на обслуживание архитектуре.
Большая часть документации понятна; однако я с трудом определяю, какой тип сериализации использует 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
- это простой DTO, помеченный атрибутом [Serializable]
; в наших старых очередях это было бинарным сериализованным, чтобы оно могло храниться быстрее и иметь метаданные. Это важно для нас, поскольку мы используем очереди для отправки команд с использованием шаблона описанного здесь, при этом получающая роль рабочего десериализует команду со смесью дженериков и динамической типизации.
Однако согласно статье ЭТО тело, переданное конструктору BrokeredMessage
, является "двоичным XML-сериализованным". Мое предположение заключается в том, что это стандартная сериализация XML, а затем передается через двоичный форматтер, верно ли это?
Далее; означает ли это, что если бы я использовал функциональность тела сообщения BrokeredMessage
по умолчанию; Я должен был бы обеспечить, чтобы все объекты были XML Serializable, включая все проблемы, которые представляют? (Потеря частных полей, метаданных для десериализации с использованием дженериков, атрибутов сериализации xml)
Наконец; если это так; есть ли простой способ обойти это? Я рассматривал возможность создания собственной бинарной сериализации, а затем сохранил byte[]
в свойстве BrokeredMessage
.