我目前正在从 NServiceBus 4.7.5 升级到 NServiceBus 5.2.4,当使用 XmlSerializer 时,我注意到当我尝试序列化消息时它会生成无效的 XML 消息 - 不再声明简单类型的命名空间,但它们仍在文档中使用。
例如,如果我尝试序列化一条消息,该消息公开了如下定义的 SerializedPair 属性:
public class SerializedPair
{
public string Key { get; set; }
public object Value { get; set; }
}
在 4.7.5 中,它将被序列化为:
<?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/xxx.Crm.ServiceBusMessages"
xmlns:guid="Guid" xmlns:int32="Int32"
xmlns:string="String"
xmlns:datetime="DateTime"
xmlns:boolean="Boolean"
xmlns:decimal="Decimal">
<UpdateContact>
<SerializedPair>
<Key>AddressId</Key>
<guid:Value>ebdeeb33-baa7-4100-b1aa-eb4d6816fd3d</guid:Value>
</SerializedPair>
....
在 5.2.4 中,它被序列化为:
<?xml version="1.0" ?>
<UpdateContact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://tempuri.net/xxx.Crm.ServiceBusMessages">
<SerializedPair>
<Key>AddressId</Key>
<guid:Value>70a22cd7-64fd-4d6d-ab13-2ad7800addc7</guid:Value>
</SerializedPair>
....
请注意,“Messages”元素不再存在,并且“xmlns:guid”命名空间声明也丢失了,这使得该 XML 无效。如何让 NServiceBus 再次生成有效的 xml?
为了完整起见,我的 BusConfiguration 如下所示:
BusConfiguration busConfiguration = new BusConfiguration();
busConfiguration.UseSerialization<XmlSerializer>();
busConfiguration.UseTransport<MsmqTransport>();
ISendOnlyBus bus = Bus.CreateSendOnly(busConfiguration);