NServiceBus использует сторонний xml

#nservicebus

#nservicebus

Вопрос:

Все, кто-нибудь может дать мне некоторые рекомендации по разрешению NServiceBus использовать XML-сообщения из очереди, которые не были созданы NServiceBus. Я пытаюсь интегрироваться со сторонней системой, которая отправляет XML-сообщения в очередь. У меня ОЧЕНЬ мало контроля над XML, создаваемым сторонним файлом.

Я попытался обернуть их XML тегом -Messages /- и я могу заставить сообщение попасть в нужный обработчик, но многие поля (особенно в дочерних классах) просто десериализуются до null. Третья сторона создает несколько «типов» сообщений, но во всех случаях XML является достаточно простым.

Я пытаюсь избежать написания адаптера, который просто считывает XML и отправляет сообщения по шине.

Любой совет был бы оценен.

Спасибо

Ответ №1:

Ключ заключается в том, как вы генерируете классы сообщений. Если вы можете, вы должны получить схемы XSD от третьей стороны, которые представляют XML-файлы, которые они вам отправляют.

Затем вы можете генерировать классы из схем, используя xsd.exe что в значительной степени гарантирует чистую десериализацию из XML в type.

Если вы не можете получить схемы, вы можете снова использовать xsd.exe для вывода схем из сообщений. Однако этот метод не особенно надежен в отказоустойчивости и негативно отразится на чем-либо неожиданном в сообщении, которое не соответствует вашей предполагаемой схеме.

Комментарии:

1. Да, я пытался использовать xsd.exe для вывода схемы и последующего создания класса… Я подобрался довольно близко к этому, но все равно в итоге получаю множество дочерних классов, где все свойства равны NULL … когда xml явно имеет значения.

2. Вы не можете заставить третью сторону предоставить вам схему?

Ответ №2:

Сериализация в NSB абстрагирована, поэтому вы можете написать свой собственный сериализатор на основе этого формата. Затем вы можете указать NSB использовать ваш сериализатор вместо одного из встроенных.

Комментарии:

1. используя обычный. Сетевая система.Xml.Сериализация. XmlSerializer Я могу десериализовать xml просто отлично.. что заставляет меня задуматься о двух вещах… могу ли я просто подключить это (с легкостью), а также почему nsb так далек от десериализации, когда это простой формат документа… Должно быть, я делаю что-то не так?

2. Сериализатор, который он использует, является пользовательским для размещения интерфейсов (XSD.exe этого не делает). Может быть, вам стоит просто попробовать использовать предоставленный инструмент schema, я просто не уверен, что он создает классы. Я бы попробовал.