也许我在这里遗漏了一些东西,这个问题可能与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内部,主机将运行什么上下文(如果这有意义!)。
答案 0 :(得分:0)
我猜您在.LoadMessageHandlers()
之后错过了您的流畅配置中的.UnicastBus()
行 - 这是导致自托管应用程序无法处理发送给他们的邮件的最常见错误。
如果情况并非如此,请将您的流畅配置块添加到您的问题中,我们将会看一下。
编辑:发布流利配置后
我的下一个猜测是你宣布你的序列化器太迟了。 .UnicastBus()
步骤是“让我们开始这件事”之前的最后一站!我想也许当你达到这一点时,配置已经假设你使用默认的XmlSerializer。您是否可以尝试在.StructureMapBuilder()
之后将序列化程序行移至右侧并查看其是否更好?
如果这不起作用,我可能会考虑暂时使用.DefaultBuilder()
来排除IoC容器的问题。
关于您的其他评论,自托管总线永远不会有EndpointConfig。这是仅由NServiceBus.Host.exe托管的端点的指针。
我也认为你从这里调用这个流畅的配置并不是很明显。启动webapp时需要调用此代码一次 - 通常来自Global.asax中的应用程序启动方法。因为webapp处于控制状态,所以没有自动程序集扫描来查找和连接NServiceBus管道,就像在NServiceBus主机中一样。