C# NServiceBus自定义错误处理TransportMessage反序列化

C# NServiceBus自定义错误处理TransportMessage反序列化,c#,serialization,error-handling,nservicebus,C#,Serialization,Error Handling,Nservicebus,我正在使用CustomFaultManager处理失败的消息,以便在将它们放入错误队列之前处理它们 在 我收到TransportMessage,我必须从以下位置获取类型: var header = message.Headers["NServiceBus.EnclosedMessageTypes"]; var messageType = MessageTypes.Where(x => x.AssemblyQualifiedName != null

我正在使用CustomFaultManager处理失败的消息,以便在将它们放入错误队列之前处理它们

我收到TransportMessage,我必须从以下位置获取类型:

var header = message.Headers["NServiceBus.EnclosedMessageTypes"];
var messageType = MessageTypes.Where(x => x.AssemblyQualifiedName != null 
                                && header.Contains(x.AssemblyQualifiedName)).ToList();
然后将我的自定义逻辑应用于解压消息(因为我正在压缩大型msmq消息)。在这个方法中,是否有可能得到一条与我在
Handle
方法中得到的原始消息一样的消息

为什么这会困扰我?现在,每当我更改序列化方法或压缩方法时,我需要记住在自定义错误处理程序中应用更改

如果我可以将TransportMessage强制转换为我的自定义消息实现,我会很高兴,就像:

var myMessage = message as MyCustomMessage;
你们知道有没有一种不用手动反序列化就能在NServiceBus中进行自定义错误处理的方法


我尝试强制转换到我的消息类型(如上所述),但结果它一直给我空值,因为消息在
TransportMessage
message
字段中序列化,我们也使用了旧版本的NServiceBus(3.x)。到目前为止,我们的解决方案是让我们的消息处理程序捕获任何异常,然后将它们包装在一个自定义异常中,该异常包含我们从消息中需要的值。然后,我们抛出此异常,由NServiceBus处理

在我们的
IManageMessageFailures.ProcessingAllwaysFailsformMessage
实现中,我们根据异常类型以及NServiceBus.EnclosedMessageTypes值调用相应的错误处理程序


希望这有帮助。

您能解释一下在自定义错误处理中要实现什么,以及您使用的是什么版本的NServiceBus吗。那我也许能给你一个解决办法。顺便说一句,IManageMessageFailures始终在TransportMessage级别上运行,因此您不是在逻辑消息级别(消息的实际有效负载)上运行@DanielMarbach我使用的是NServiceBus 4.5。我想在消息发送到错误队列之前获取它。我想得到它的内容(作为我的自定义消息实现铸造),并用它来发挥我的魔力。到目前为止,我需要处理
TransportMessage
。您是否可以选择升级到5.0?有了行为管道,这变得容易多了。@DanielMarbach目前还不能这样做。我们最近迁移到了4.5,这真是一件痛苦的事。你有没有研究过突变基因,顺便说一句,你介意联系我在特定网络公司的daniel dot marbach,解释一下你移民时的痛苦吗?对我们来说是一次很好的学习经历。
var myMessage = message as MyCustomMessage;