如何让我的MVC应用程序发送命令并订阅NServiceBus中的事件

时间:2013-04-05 12:37:01

标签: asp.net-mvc-4 nservicebus

也许我在这里遗漏了一些东西,这个问题可能与this one相同,对于任何重复都很抱歉。

我有一个MVC4站点,很高兴Sends()命令到我的NServiceBus服务器。我现在希望同一个MVC站点能够从同一个NServiceBus服务器订阅IEvents Publish()。但我无法让它发挥作用。

消息正在从服务器发布并在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内部,主机将运行什么上下文(如果这有意义!)。

1 个答案:

答案 0 :(得分:0)

我猜您在.LoadMessageHandlers()之后错过了您的流畅配置中的.UnicastBus()行 - 这是导致自托管应用程序无法处理发送给他们的邮件的最常见错误。

如果情况并非如此,请将您的流畅配置块添加到您的问题中,我们将会看一下。

编辑:发布流利配置后

我的下一个猜测是你宣布你的序列化器太迟了。 .UnicastBus()步骤是“让我们开始这件事”之前的最后一站!我想也许当你达到这一点时,配置已经假设你使用默认的XmlSerializer。您是否可以尝试在.StructureMapBuilder()之后将序列化程序行移至右侧并查看其是否更好?

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

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

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