我第一次努力使用 NServiceBus,没有 ESB 背景。在阅读了博客文章、示例、文档等之后。我无法弄清楚为什么我的 C# 类库不会发送消息。在 Bus.Send(msg) 我得到“没有为消息 Messages.TraceStatement 指定目的地。无法发送消息。检查配置文件中的 UnicastBusConfig 部分并确保消息类型存在 MessageEndpointMapping。”
但首先,关于我的架构和我正在尝试做的事情,因为它与我在那里看到的任何示例都不同。
我的意图是像 Ben 一样使用 SignalR 和 NServiceBus ,但有两个主要变化:
- 不使用 NServiceBus.Host.exe。我想要一个仅 Web 的,没有控制台的实现。
- 出于实时代码跟踪的目的,从中间层类库发送消息。换句话说,我想在我的代码周围添加 Bus.Send 语句,从而能够在网页上查看代码执行跟踪语句(它们只是开发人员设置的临时字符串)。
假设我没有将 NServiceBus 误解到我所设想的甚至不可能的程度(或对该技术的滥用),我想弄清楚如何从类库发送消息。目前我有一个“Managers” dll,它有一个 app.config 文件,如下所示:
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig InputQueue="TerminalQueue" ErrorQueue="TerminalErrorQueue" NumberOfWorkerThreads="1" MaxRetries="5"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="Messages" Endpoint="WorkerQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
</configuration>
注意:在 Ben 的项目中,我将“Commands”重命名为“Messages”。因此(参考我帖子顶部的错误消息),据我所知,我已经正确定义了 MessageEndpointMapping。(我验证了队列存在于 MSMQ 中。)
谁能告诉我我做错了什么?
此外,我非常感谢有关如何删除 NServiceBus.Host.exe 依赖项的输入(请参阅 Ben 示例中的 Worker 项目)。理想情况下,类库将发送消息(就像 Ben 的项目中的终端所做的那样),Web 应用程序作为订阅者能够处理事件并使用 SignalR 显示消息。
更新
目前我已经放弃了类库项目中的配置 DLL,因为我认为 Web.config 会覆盖它。所以我的 Web.config 现在看起来有以下内容:
<section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<MsmqTransportConfig
InputQueue="WebQueue"
ErrorQueue="WebErrorQueue"
NumberOfWorkerThreads="1"
MaxRetries="5"
/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="MessageEvents" Endpoint="WebQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
我还根据http://docs.particular.net/nservicebus/messaging/publish-subscribe/创建了一个名为“NServiceBus_Subscriptions”的私有电车队列。
我的 Global.asax.cs 有这个:
Bus = Configure
.WithWeb()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.PurgeOnStartup(false)
.UnicastBus()
.LoadMessageHandlers()
.MsmqSubscriptionStorage()
.CreateBus()
.Start();