我遇到了 NServiceBus 4.4.2 的问题,这让我很吃力。我在 MVC 应用程序中自行托管 NSB。该实例被放入 Autofac 容器中并注入(inject)到 Controller 中。到目前为止,还不错。
使用 SendLocal(命令)发送消息按预期工作。该消息以 JSON 形式出现在 MSMQ 中,因为我已将 NSB 配置为这样做。
现在,我的消息处理程序被调用,它也是我的 MVC 应用程序的一部分。为简单起见,我现在不向此处理程序注入(inject)任何内容。在任何情况下,出现的消息都是空的(例如,属性为 null 或 Guid.Empty)。
当我将 NSB 的序列化更改为 XML 时,它起作用了。看起来,同一个实例使用 JSON 进行序列化,使用 XML 进行反序列化。
这是我用来初始化总线的代码:
Configure.Transactions.Enable();
Configure.Serialization.Json();
Configure.Features.Disable<Sagas>();
Feature.Disable<XmlSerialization>();
Instance =
Configure.With(
AllAssemblies.Matching("Messages1.dll").And("Handler1.dll").And("Messages2.dll").And("Handler2.dll"))
.DefineEndpointName(ConfigurationManager.AppSettings["ServiceBusEndpointName"])
.DefaultBuilder()
.Log4Net<RollingFileAppender>(x => x.File = ConfigurationManager.AppSettings["ServiceBusLog"])
.RavenSubscriptionStorage()
.UseTransport<Msmq>()
.PurgeOnStartup(false)
.UnicastBus()
.RunHandlersUnderIncomingPrincipal(false)
.CreateBus()
.Start(() => Configure.Instance.ForInstallationOn<Windows>()
.Install());
如果不知道这里发生了什么:-(有人知道吗?
亲切的问候 马尔科·海涅
最佳答案
感谢大家的帮助,
但通常情况下,错误在于椅子和键盘之间:-/
是的,我所有的观察似乎都是正确的,但出于所有错误的原因。问题很简单:我的消息类没有无参数构造函数,只有私有(private) setter 。看起来,虽然 XML 序列化程序对此没有问题,但 JSON 序列化程序却有。
在公开属性 get/setter 之后,我终于收到了我的消息。无赖。
特别感谢 Particular,他为帮助我付出了巨大的努力。我想,我所需要的只是休息几天 =)
关于c# - 使用 JSON 时 NServiceBus 处理程序出现空消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22225349/