c# – 没有为消息指定目的地,但我的NServiceBus配置似乎设置正确
我创建了一个标准的NServiceBus发布订阅程序.向我的发布商NServicBus主机发送消息时,我一直收到以下错误:
没有为消息TrackEventPublisher.TrackEventPublisher.InternalMessages.TrackEventMessages指定目标.消息无法发送.检查配置文件中的UnicastBusConfig部分,并确保消息类型存在MessageEndpointMapping. 嗯…. MessageEndpointMapping存在! 这是我用来测试MessagePublisher类的测试控制台应用程序代码: class Program { static void Main(string[] args) { Console.WriteLine("Click enter to submit message."); Console.ReadLine(); string aMessage = "Please Work!!!!!!!!"; MessagePublisher publisher = new MessagePublisher(); publisher.PublishEventMessage(aMessage); } } 这是我的消息发送者类,它将消息发送到另一个要发布的NServiceBus发布服务器: public class MessagePublisher { public IBus Bus { get; set; } public MessagePublisher() { BusInitializer.Init(); Bus = BusInitializer.Bus; } public void PublishEventMessage(string message) { Bus.Send(new TrackEventMessages(message)); } } 我的总线初始化程序: class BusInitializer { public static IBus Bus { get; private set; } public static void Init() { Bus = NServiceBus.Configure.With() .Log4Net() .DefaultBuilder() .XmlSerializer() .MsmqTransport() .IsTransactional(false) .PurgeOnStartup(false) .UnicastBus() .LoadMessageHandlers() .ImpersonateSender(false) .CreateBus() .Start(); } } 我的留言课: namespace TrackEventPublisher.TrackEventPublisher.InternalMessages { public class TrackEventMessages : IMessage { public string HelloWorldMessage { get; set; } public TrackEventMessages(string message) { HelloWorldMessage = message; } } } 最后,我对消息发布者的配置: namespace TrackEventPublisher.PublishManager { public class EndpointConfig : IConfigureThisEndpoint,AsA_Server { } } <configuration> <configSections> <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig,NServiceBus.Core" /> <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig,NServiceBus.Core" /> </configSections> <MsmqTransportConfig InputQueue="PublishManager" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" /> <UnicastBusConfig ForwardReceivedMessagesTo=""> <MessageEndpointMappings> <add Messages="TrackEventPublisher.TrackEventPublisher.InternalMessages" Endpoint="TrackEventPublisher" /> </MessageEndpointMappings> </UnicastBusConfig> </configuration> 配置由NServiceBus自动生成器创建.配置似乎是正确的.有没有人知道为什么我通过以下方式发送消息时得到InvalidOperationException“没有为消息指定目的地”: Bus.Send(new TrackEventMessages(message)); 提前致谢.我花了太多时间在这个上面. *更新** 我可能正在从MessagePubliser类错误地设置总线.我的目标是从另一个应用程序(wpf,控制台等)实例化MessagePublisher类.这就是我使用BusInitializer类的原因.但是,我创建的总线与MessagePublisher类中的app.config无关. 解决方法
我们的想法是使用WPF应用程序初始化总线并将信息发送给发布者主机.我观看了Udi的pub / sub演示视频(请参阅NServiceBus网站进行在线培训),该视频描述了使用仅发送NServiceBus主机作为Web应用程序向发布者发送消息.我使用WPF应用程序而不是Web应用程序,它就像一个魅力.
以下是我的应用程序中可能有助于其他人的一些代码. App.Config中: <configuration> <configSections> <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig,NServiceBus.Core" /> </configSections> <MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" /> <UnicastBusConfig ForwardReceivedMessagesTo=""> <MessageEndpointMappings> <add Messages="TrackEventPublisher.EventPublisher.InternalMessages" Endpoint="EventPublisher" /> </MessageEndpointMappings> </UnicastBusConfig> </configuration> App.xaml.cs: public partial class App : Application { public static IBus Bus { get; private set; } protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); Bus = NServiceBus.Configure.With() .DefineEndpointName("DemoExecutive") .Log4Net() .DefaultBuilder() .XmlSerializer() .MsmqTransport() .IsTransactional(false) .PurgeOnStartup(false) .UnicastBus() .ImpersonateSender(false) .CreateBus() .Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install()); } } MainWindow.xaml.cs :(注意:您使用App.Bus.Send()发送消息.) private void button1_Click(object sender,RoutedEventArgs e) { const long aNumber = 999999; var eventWhen = DateTime.Now; const string eventWhere = "Generic Kitchen"; const string eventType = "Breakfast"; const string aStatus = "Broken Toaster"; var genericEventMessage = new GenericEventMessage { Number = aNumber,EventWhen = eventWhen,EventWhere = eventWhere,EventType = eventType,Status = aStatus }; App.Bus.Send(new TrackEventMesage(genericEventMessage)); } 对不起,我这么晚才发布答案安德烈亚斯.我去看看我多久回顾一下我的帖子. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |