Методы десериализации XML NServiceBus: множественные корневые элементы - PullRequest
0 голосов
/ 02 июля 2018

У нас есть две конечные точки NServiceBus в разных версиях, обе с сериализацией XML.

Когда старый пытается отправить сообщения более новому, например:

<?xml version="1.0" ?>
<Messages 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://tempuri.net/****.Marketplace.Common.Interfaces.Entities" 
    xmlns:baseType="****.Marketplace.Common.Interfaces.Entities.MarketplaceAuditRecordBase" 
    xmlns:baseType1="Harmony.Core.Messages.AuditRecordBase" 
    xmlns:baseType2="Harmony.Core.Messages.IAuditRecord">
    <AuditRecord>
        <Id>0</Id>
        <BoutiqueUrlName></BoutiqueUrlName>
        <BoutiqueId>5301a9f1-d5bd-45c1-8b4f-29b60ed5d8c5</BoutiqueId>
        <UserId>null</UserId>
        <Success>true</Success>
        <EventDateUtc>2018-07-02T14:35:03.1815550</EventDateUtc>
        <UserAgent>Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36</UserAgent>
        <Url>http://marketplace.****.com/my/items/publish?productId=4181660</Url>
        <CountryCode>GB</CountryCode>
        <RequestId>4f6b42fa-4c27-4118-bb68-1e314d7a246e</RequestId>
        <Application>Site</Application>
        <EventCategory>Products</EventCategory>
        <EventType>Product-State-Change</EventType>
        <EventMessage>Product state changed from Unpublished to Live ()</EventMessage>
        <ReferenceId>4181660</ReferenceId>
        <SecondaryReferenceId>Live</SecondaryReferenceId>
    </AuditRecord>
</Messages>

Не удается получить конечную точку с сообщением:

NServiceBus.MessageDeserializationException: An error occurred while attempting to extract logical messages from transport  
---> System.Xml.XmlException: There are multiple root elements    . Line 4, position 2.

Насколько я могу судить, эти сообщения должны быть обратно совместимыми, а XML в сообщении правильно сформирован и не вызывает проблем, если я попытаюсь разобрать его с XElement.Load или new XmlDocument().LoadXml(xml).

Кто-нибудь может указать мне правильное направление относительно того, что не так?

Я не вижу каких-либо опций на XML-сериализаторе, чтобы поиграть с ним, и поиск в Google этой проблемы оказался в значительной степени бупкисом.

...