C# 没有为消息指定目标,但我的NServiceBus配置似乎设置正确
我已经创建了一个标准的NServiceBus发布-订阅程序。向我的发布服务器NServicBus主机发送消息时,我不断收到以下错误: 没有为消息TrackEventPublisher.TrackEventPublisher.InternalMessages.TrackEventMessages指定目标。无法发送消息。检查配置文件中的UnicastBusConfig部分,并确保该消息类型存在MessageEndpointMapping 嗯。。。。MessageEndpointMapping存在 以下是我用来测试MessagePublisher类的测试控制台应用程序代码:C# 没有为消息指定目标,但我的NServiceBus配置似乎设置正确,c#,nservicebus,C#,Nservicebus,我已经创建了一个标准的NServiceBus发布-订阅程序。向我的发布服务器NServicBus主机发送消息时,我不断收到以下错误: 没有为消息TrackEventPublisher.TrackEventPublisher.InternalMessages.TrackEventMessages指定目标。无法发送消息。检查配置文件中的UnicastBusConfig部分,并确保该消息类型存在MessageEndpointMapping 嗯。。。。MessageEndpointMapping存在 以
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);
}
}
下面是我的message sender类,它将消息发送到另一个要发布的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>
提前谢谢。我在这件事上花了太多时间了
*更新**
我可能在MessagePubliser类中设置了错误的总线。我的目标是从另一个应用程序(wpf、控制台等)实例化MessagePublisher类。这就是我使用BusInitializer类的原因。但是,我正在创建的总线与MessagePublisher类中的我的app.config不相关。有人知道如何实例化MessagePublisher类以便我的总线识别app.config吗?也许使用IWantToRunAtStartup?的想法是使用WPF应用程序初始化总线并将信息发送到发布服务器主机。我观看了Udi的pub/sub演示视频(在线培训请参见NServiceBus网站),其中描述了使用仅发送的NServiceBus主机作为web应用程序向发布者发送消息。我使用了WPF应用程序而不是web应用程序,它工作起来很有魅力 下面是我的应用程序中的一些代码,可以帮助其他人 App.Config:
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig ForwardReceivedMessagesTo="">
<MessageEndpointMappings>
<add Messages="TrackEventPublisher.EventPublisher.InternalMessages" Endpoint="EventPublisher" />
</MessageEndpointMappings>
</UnicastBusConfig>
</configuration>
很抱歉,我这么晚才发布答案Andreas。我去展示一下我是多么频繁地回顾我的帖子。:) TrackEventPublisher配置:您的TrackEventMessage是否位于自己的名为TrackEventPublisher.TrackEventPublisher.InternalMessages的项目中?是的,正如您所提到的,TrackEventMessage位于自己的项目中。Udi,我实际上是在看了你的酒吧/酒吧培训视频。我没有尝试使用send/receive NServiceBus主机作为我的消息发送者,而是创建了一个类似于演示中的web应用程序的WPF应用程序。它工作得很好!!我正在尝试使用WPF应用程序订阅服务器。你能看一下我在另一个帖子上发布的一个问题吗:谢谢你的帮助!为公共汽车欢呼!您似乎混淆了两种托管模式。您拥有endpoint config类,该类最终将与NServiceBus.Host.exe一起使用,但您拥有自己的控制台应用程序作为主机。在移动到您自己的主机之前,请尝试使用内置主机检查其余配置。您介意将此作为答案发布,以便我们可以关闭此主机吗?
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig ForwardReceivedMessagesTo="">
<MessageEndpointMappings>
<add Messages="TrackEventPublisher.EventPublisher.InternalMessages" Endpoint="EventPublisher" />
</MessageEndpointMappings>
</UnicastBusConfig>
</configuration>
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());
}
}
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));
}