0

我有一个相当简单的 Pub/sub 设置,它在我们的开发人员机器上运行良好,但是当我部署到我们的测试服务器时,它会为所有消息抛出此错误:

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、Distributor 和 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。

我仍在遍历服务器设置,因为我相信一定有一些差异使它滴答作响,但我还没有找到它。

有人对要寻找什么有任何建议吗?

亲切的问候

4

1 回答 1

0

看来我发现了错误。

在服务器上测试了一个原始的简单控制台 Pub/Sub 之后,我在处理程序中添加了一个 try catch 并捕获了......我自己的异常......

我很尴尬。

但似乎异常没有正确转发到 NSB 中的日志,因此我完全摆脱了真正的问题。

我不知道这是否是在更高版本的 NSB 中修复的问题,但我希望如此。在那之前,我使用自己的 try catch 逻辑来添加自定义日志条目。

亲切的问候。

于 2013-07-19T10:07:17.293 回答