C# NServiceBus-NServiceBus.Host作为发布者,WPF应用程序作为订阅者。如何?
我试图使用NServiceBus将消息从控制台进程(非常类似于启动NServiceBus.Host.exe的库中包含的PubSub示例)发送到我的WPF应用程序 这就是我所做的。 在WPF App.xaml类中,我定义了C# NServiceBus-NServiceBus.Host作为发布者,WPF应用程序作为订阅者。如何?,c#,wpf,nservicebus,C#,Wpf,Nservicebus,我试图使用NServiceBus将消息从控制台进程(非常类似于启动NServiceBus.Host.exe的库中包含的PubSub示例)发送到我的WPF应用程序 这就是我所做的。 在WPF App.xaml类中,我定义了 public static IBus Bus; 同一类,在应用程序启动处理程序中: Bus = Configure.With().DefaultBuilder().BinarySerializer() .MsmqTransport().IsTransactional(true
public static IBus Bus;
同一类,在应用程序启动处理程序中:
Bus = Configure.With().DefaultBuilder().BinarySerializer()
.MsmqTransport().IsTransactional(true).PurgeOnStartup(false)
.UnicastBus().ImpersonateSender(false).LoadMessageHandlers()
.CreateBus()
.Start();
Bus.Subscribe<EventMessage>((message) =>
{
switch (message.EventType)
{
case EventType.CreateSingleStay:
break;
case EventType.MoveToStartUpState:
case EventType.MoveToOperativeState:
case EventType.MoveToOutOfOrderState:
break;
case EventType.InputSignalDetected:
break;
}
return true;
});
namespace PlusMatic.EventsTest
{
公共类TestPlusMacServerEndpoint:IWantToRunAtStartup
{
公共IBus总线{get;set;}
私有线程_loopConsole;
#Iwanttor项目的区域实施
公开募捐
{
string readLine=string.Empty;
bool publishIEvent=true;
while(readLine!=“j”)
{
readLine=Console.readLine();
var eventMessage=publishIEvent
?Bus.CreateInstance()
:neweventmessage();
...
发布(eventMessage);
WriteLine(“Id为{0}的已发布事件”,eventMessage.EventId);
publishIEvent=!publishIEvent;
}
}
公共停车场()
{
}
}
}
这是我的活动课
namespace PlusMatic.EventsTest
{
[Serializable]
public class EventMessage : IEvent
{
public Guid EventId { get; set; }
public DateTime? Time { get; set; }
public EventType EventType { get; set; }
public MoveToStateEvent NextApplicationState { get; set; }
public InputEvent InputSignal { get; set; }
public IProductCard<Card> Card { get; set; }
}
public interface IEvent : IMessage
{
Guid EventId { get; set; }
DateTime? Time { get; set; }
IProductCard<Card> Card { get; set; }
EventType EventType { get; set; }
MoveToStateEvent NextApplicationState { get; set; }
InputEvent InputSignal { get; set; }
}
}
namespace PlusMatic.EventsTest
{
[可序列化]
公共类事件消息:IEvent
{
公共Guid事件ID{get;set;}
公共日期时间?时间{get;set;}
public EventType EventType{get;set;}
public MoveToStateEvent下一个应用程序状态{get;set;}
公共InputEvent InputSignal{get;set;}
公共IP卡{get;set;}
}
公共接口事件:IMessage
{
Guid EventId{get;set;}
日期时间?时间{get;set;}
IProductCard{get;set;}
EventType EventType{get;set;}
MoveToStateEvent下一个应用程序状态{get;set;}
InputEvent InputSignal{get;set;}
}
}
publisher中的App.config:
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>
就这样。
什么都不管用。
我从控制台项目发布事件,但在我的WPF应用程序中没有发生任何事情
也许我需要更多的练习…;)
我使用的是NServiceBusVersion3.0,它在RC4版本中,但我想这不是问题所在
感谢任何能帮忙的人
我发现了问题。
我订阅了一个“EventMessage”(实现了“IEvent”->实现了“IMessage”)并发布了一个“IEvent” 找到了问题。
我订阅了一个“EventMessage”(实现了“IEvent”->实现了“IMessage”)并发布了一个“IEvent” 请注意,我认为MsmqTransportConfig在NServiceBus 3中无效,我非常确定您需要通过fluent Config执行此操作,发布服务器端定义的端点
PlusMaticPublisherInputQueue
在哪里?如果您使用NServiceBus.Integration配置文件启动控制台应用程序,您在输入队列中看到订阅消息了吗?没有,没有订阅消息。此外,我还解决了有关NSB新版本3.0的一些“细节”,它需要如下配置
并且我根据在抛出的异常(!)中找到的指令更改了发布者输入队列的名称。在新版本中,将自动检测传输队列的名称,它是名称空间的名称(如果我理解正确的话)。l请注意,我认为MsmqTransportConfig在NServiceBus 3中无效,我非常确定您需要通过fluent Config执行此操作,发布服务器端定义的端点PlusMaticPublisherInputQueue
在哪里?如果您使用NServiceBus.Integration配置文件启动控制台应用程序,您在输入队列中看到订阅消息了吗?没有,没有订阅消息。此外,我还解决了有关NSB新版本3.0的一些“细节”,它需要如下配置
并且我根据在抛出的异常(!)中找到的指令更改了发布者输入队列的名称。在新版本中,将自动检测传输队列的名称,它是名称空间的名称(如果我理解正确的话)。L
namespace PlusMatic.EventsTest
{
public class TestPlusMaticServerEndpoint : IWantToRunAtStartup
{
public IBus Bus { get; set; }
private Thread _loopConsole;
#region Implementation of IWantToRunAtStartup
public void Run()
{
string readLine = string.Empty;
bool publishIEvent = true;
while (readLine != "j")
{
readLine = Console.ReadLine();
var eventMessage = publishIEvent
? Bus.CreateInstance<IEvent>()
: new EventMessage();
...
Bus.Publish(eventMessage);
Console.WriteLine("Published event with Id {0}.", eventMessage.EventId);
publishIEvent = !publishIEvent;
}
}
public void Stop()
{
}
}
}
namespace PlusMatic.EventsTest
{
[Serializable]
public class EventMessage : IEvent
{
public Guid EventId { get; set; }
public DateTime? Time { get; set; }
public EventType EventType { get; set; }
public MoveToStateEvent NextApplicationState { get; set; }
public InputEvent InputSignal { get; set; }
public IProductCard<Card> Card { get; set; }
}
public interface IEvent : IMessage
{
Guid EventId { get; set; }
DateTime? Time { get; set; }
IProductCard<Card> Card { get; set; }
EventType EventType { get; set; }
MoveToStateEvent NextApplicationState { get; set; }
InputEvent InputSignal { get; set; }
}
}
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>