DataBusProperty 上的 NServiceBus MessageDeserializationException<byte[]>

NServiceBus MessageDeserializationException on DataBusProperty<byte[]>

我们有一个 NServiceBus 6 环境,其中包含许多服务,这些服务使用 DataBusProperty 通过自定义 SqlDataBus : IDataBus 在彼此之间发送文件。

使用内置的 JSON 序列化程序,这在 NSB6 上运行良好,但在我们移动到 NSB7 和 NewtonsoftSerializer 后现在损坏了。

从我们的 类 中删除 DataBusProperty 并仅使用 byte[] 工作正常。我们还尝试将 DataBus 更改为 FileShareDataBus 但出现相同的异常:

NServiceBus.MessageDeserializationException: An error occurred while attempting to extract logical messages from incoming physical message c7b5cd47-c1b7-4610-9f6c-aa7800cc9b64 --->
Newtonsoft.Json.JsonReaderException: Error reading bytes. Unexpected token: StartObject. Path 'Data.Key', line 1, position 68. 

即使服务正在向自身发送消息,这也会失败。我们还可以看到写入文件存储的文件,无论是 Sql 还是文件共享,因此它们的序列化都很好。

来自错误队列的示例负载是

{"ExecutionId":"1db85105-a71c-4b29-87da-9b7ae6518c1c","Data":{"Key":"2019-06-26_13\6a2b63c7-12b0-46dd-8b92-f1fc743d27c1","HasValue":true}}

当它在 NSB6+JsonSerializer 中正常工作时,我们如何才能在 NSB7+NewtonsoftSerializer 中反序列化它?

谢谢

虽然数据总线属性应该有效,但还有一种数据总线属性的替代方法,即通过发送选项使用流附件:

根据用例,使用 Streams 可能是更有效的方法。

我只花了大约 8 个小时试图弄清楚发生了什么,并意识到,无论出于何种原因,NSB7 都需要一个无参数的构造函数和可设置的属性。我将返回 Particular 以查看是否预期会发生这种变化,但我预计我们将不得不调整我们所有的消息 类 以适应该范例。