2013-11-09 2 views
1

Передача брокерского сообщения за ServiceBus без каких-либо обычаев DataContractSerializer[as Default XML Serializer Take Place].BrokeredMessage Deseralization поставляется с нежелательной строкой

var message = new BrokeredMessage(objMess.MessageBody); 

Примечание:В основном тело сообщения типа HTML сообщения электронной почты.

Но когда на сообщениях, доставленных на рабочий роли после deserialization, я вижу какой-то случайный текст добавляются в верхнем теле,

var reader = new StreamReader(receivedMessage.GetBody<Stream>()); 

@string3http://schemas.microsoft.com/2003/10/Serialization/� . 
Rest of Message Body 

я попытался дать заказ DataContractSerializer. но это перепуталось с символами HTML.

Formatting the content for Service Bus messages статья, которую я нашел, но все же находя способ избавиться от схемы String.

Как сейчас я делаю substring с сообщением body.

ответ

4

Похоже, что у вас есть несоответствующий тип отправителя и получателя. ServiceBus BrokeredMessages следует использовать так:

1) Если вы отправляете с var message = new BrokeredMessage(object) вы должны получить с receivedMessage.GetBody<typeof(object)>()

2) Если вы отправляете с var message = new BrokeredMessage(object, XmlObjectSerializer> -> вы должны получить с receivedMessage.GetBody<typeof(object)>(XmlObjectSerializer)

3) Если вы отправляете с var message = new BrokeredMessage(Stream) Вы должны получить с receivedMessage.GetBody<Stream>

Это должно быть прозрачно для вас. Просто введите тип, который вы отправляете в приемник. receivedMessage.GetBody<String>(), если это строка или receivedMessage.GetBody<TypeOfMessageBody>()

+0

Да, это объясняет удобную ситуацию, когда ваш отправитель и получатель используют один и тот же lib. Как насчет ситуаций (таких как наша), где приемник является REST? Удивление, если есть способ предотвратить префикс. Мы должны обнюхивать и удалять это каждый раз, прежде чем разбирать JSON. – GGleGrand

0

Какой тип вашего objMess.MessageBody? Убедитесь, что это тот же тип, что и вы, опрос на стороне приемника, когда вы делаете GetBody<Stream>()

Первая строка выполняется Service Bus для сериализации вашего объекта. Это можно увидеть, когда вы проверяете свою очередь с помощью таких инструментов, как Service Bus Explorer.

 Смежные вопросы

  • Нет связанных вопросов^_^