没有为消息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无关.
有没有人知道如何实例化MessagePublisher类,以便我的总线识别app.config?也许使用IWantToRunAtStartup?
解决方法
以下是我的应用程序中可能有助于其他人的一些代码.
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)); }
对不起,我这么晚才发布答案安德烈亚斯.我去看看我多久回顾一下我的帖子.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。