我有一个相当简单的发布/订阅设置,可以在我们的开发人员计算机上正常运行但是当我部署到我们的测试服务器时,它会为所有消息抛出此错误:
System.NullReferenceException: Object reference not set to an instance of an object.
at NServiceBus.Unicast.UnicastBus.HandleTransportMessage(IBuilder childBuilder, TransportMessage msg) in c:\BuildAgent\work\nsb.master_6\src\unicast\NServiceBus.Unicast\UnicastBus.cs:line 1328
at NServiceBus.Unicast.UnicastBus.TransportMessageReceived(Object sender, TransportMessageReceivedEventArgs e) in c:\BuildAgent\work\nsb.master_6\src\unicast\NServiceBus.Unicast\UnicastBus.cs:line 1247
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.OnTransportMessageReceived(TransportMessage msg) in c:\BuildAgent\work\nsb.master_6\src\impl\unicast\transport\NServiceBus.Unicast.Transport.Transactional\TransactionalTransport.cs:line 480
我们已经在同一台服务器上运行其他SendOnly,Distributors和worker,因此应该正确安装msmq等。 这是我们第一次在这些服务器上使用Pub / Sub。
如果我在开发者机器上使用完全相同的二进制文件和配置,它可以顺利运行,但不能在2008R2,Powershell V3的服务器上运行。
我们正在为订阅者使用流畅的配置:
return NServiceBus.Configure.With()
.DefineEndpointName(queuePrefix)
.Log4Net(_serviceBusLog.Build())
.StructureMapBuilder()
.JsonSerializer()
.License(ConfigTable.GetConfigString(ConfigTableKeys.NServiceBus, "License"))
.MsmqTransport()
.IsTransactional(true)
.RunTimeoutManagerWithInMemoryPersistence()
.EnablePerformanceCounters()
.UnicastBus()
.CreateBus()
.Start(() => NServiceBus.Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
我们还拥有自己的UnicastBus配置,用于扫描消息处理程序(它们是消息类型),然后自动创建端点映射。这是我的第一个问题所以我禁用它并使用app.config方式设置端点,但错误仍然存在。
请注意每条消息都会出现错误。 注意我们正在运行NSB版本3.3.5。
我仍在浏览服务器设置,因为我认为必须有一些区别让它打勾,但我还没有找到它。
任何人都有关于寻找什么的建议吗?
亲切的问候
答案 0 :(得分:0)
似乎我发现了错误。
在服务器上测试一个原始的简单控制台Pub / Sub之后,我在处理程序中添加了一个try catch并捕获了......我自己的异常....
我很喜欢。
但似乎异常没有正确转发到NSB中的日志,因此我完全抛弃了真正的问题。
我不知道这是否在NSB的更高版本中得到修复,但我希望如此。 在此之前,我使用自己的try catch逻辑添加自定义日志条目。
亲切的问候。