0

也许我在这里遗漏了一些东西,这个问题可能与这个问题相同,因此对于任何重复感到抱歉。

我有一个 MVC4 站点,它非常乐意将 Sends() 命令发送到我的 NServiceBus 服务器。我现在希望同一个 MVC 站点能够从同一个 NServiceBus 服务器订阅 IEvents Publish()ed。但我就是无法让它工作。

消息正在从服务器发布并显示在 MSMQ 中,但我无法让 MVC 站点获取它们。

NServiceBus 3.3.5 可以做到这一点吗?如果是这样,我必须如何设置我的 MVC 站点才能使其正常工作?

提前致谢!

编辑:这是我在 MVC 应用程序中的配置:

Configure.With()
            .Log4Net()
            .StructureMapBuilder()
            .MsmqTransport()
            .IsTransactional(false)
            .PurgeOnStartup(false)
            .UnicastBus()
            .LoadMessageHandlers()
            .ImpersonateSender(false)
            .JsonSerializer()
            .CreateBus()
            .Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());

我没有实现 IConfigureThisEndpoint 或 AsA_ 接口的 EndpointConfig 类。我尝试添加一个,但它从未被调用,我无法确定主机是什么或如何从 Web 应用程序启动 NServiceBus 主机应用程序。甚至如果代码位于 IIS 中,主机将在什么上下文中运行(如果这有意义的话!)。

4

1 回答 1

0

我的猜测是你.LoadMessageHandlers()在流畅的配置中错过了这一行.UnicastBus()——这是导致自托管应用程序不处理发送给它们的消息的最常见错误。

如果不是这种情况,请将您的流利配置块添加到您的问题中,我们会看看。

编辑:发布流利的配置后

我的下一个猜测是您声明序列化程序为时已晚。这.UnicastBus()一步是“让我们开始这件事!”之前的最后一站之一。我在想,也许当您达到这一点时,配置已经假设您将使用默认的 XmlSerializer。您能否尝试将序列化程序线移到后面.StructureMapBuilder(),看看是否效果更好?

如果这不起作用,我可能会考虑.DefaultBuilder()暂时使用它来排除您的 IoC 容器的问题。

关于您的其他评论,自托管总线永远不会有 EndpointConfig。这是仅由 NServiceBus.Host.exe 托管的端点的指针。

我还认为你从哪里调用这个流利的配置并不是很明显。该代码需要在 webapp 启动时调用一次 - 通常从 Global.asax 中的应用程序启动方法调用。因为 web 应用程序处于控制之中,所以没有像在 NServiceBus 主机中那样查找和连接 NServiceBus 管道的自动程序集扫描。

于 2013-04-08T14:21:36.333 回答