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

标签 c# serialization error-handling nservicebus

我正在使用CustomFaultManager处理失败的消息,因此可以在将它们放入错误队列之前对其进行处理。


void IManageMessageFailures.ProcessingAlwaysFailsForMessage(TransportMessage message, Exception e)
{

我得到了TransportMessage,并且我必须从以下类型获得类型:
var header = message.Headers["NServiceBus.EnclosedMessageTypes"];
var messageType = MessageTypes.Where(x => x.AssemblyQualifiedName != null 
                                && header.Contains(x.AssemblyQualifiedName)).ToList();

然后将我的自定义逻辑应用于解压缩消息(因为我正在压缩大型msmq消息)。是否可以在此方法中获得一条消息,就像我在Handle方法中拥有的原始消息一样?

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

如果可以将TransportMessage强制转换为自定义消息实现,我将很高兴:
var myMessage = message as MyCustomMessage;

您是否知道有没有办法在NServiceBus中进行自定义错误处理而不进行手动反序列化?

我尝试强制转换为我的消息类型(如上所述),但结果始终使我为null,因为消息在MessageTransportMessage字段中序列化了

最佳答案

我们还在使用较旧版本的NServiceBus(3.x)。到目前为止,我们的解决方案是让消息处理程序捕获所有异常,然后将它们包装在一个自定义异常中,该异常包含我们从消息中需要的值。然后,我们将此异常抛出以供NServiceBus处理。

IManageMessageFailures.ProcessingAlwaysFailsForMessage实现中,我们基于Exception类型以及NServiceBus.EnclosedMessageTypes值调用适当的错误处理程序。

希望这可以帮助。

关于c# - NServiceBus自定义错误处理TransportMessage反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32442849/

相关文章:

c# - 使用 DataContractJsonSerializer 将元素附加到文件中的 JSON 数组

c# - 是否可以在空检查中推断类型的名称

sql - DoCmd.SetWarnings 和 CurrentDB.Execute 有什么区别

c# - 实现 .Net 接口(interface) (C#)

c# - 密码加密-c#

django - 如何 JSON 序列化 Python 字典?

c++ - 当我将它放在 while 语句之外时,为什么我的 ofstream 不起作用?

ios - 相同的代码一个给出错误,另一个在 iOS 中没有

c# - 从字符串数组移动到数据行

c# - 限制文本框中允许的字符(输入金额)