2
我想使用NServiceBus從控制檯進程(非常類似於啓動NServiceBus.Host.exe庫中包含的PubSub示例)發送消息到我的WPF應用程序。NServiceBus - NServiceBus.Host作爲發佈者和WPF應用程序作爲訂閱者。如何?
這就是我所做的。 在WPF的App.xaml類我已經定義
public static IBus Bus;
同一類,在application_startup處理:
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;
});
這是App.config中的WPF應用程序的:
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig InputQueue="PresentationInputQueue" ErrorQueue="PresentationErrorQueue" NumberOfWorkerThreads="5" MaxRetries="5" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="PlusMatic.EventsTest" Endpoint="PlusMaticPublisherInputQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
然後,我NServiceBus.Host發佈者,非常簡單的c#類庫,它在調試時啓動NServiceBus.Host.exe可執行文件:
namespace PlusMatic.EventsTest
{
class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher { }
}
...
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; }
}
}
的App.config在出版商:
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>
就是這樣。 沒有用。 我從控制檯項目發佈事件,並沒有發生在我的WPF應用程序。
也許我需要一些更多的實踐...;)
我使用NService總線3.0版本,至極是RC4版本,但我想這不是問題。
感謝任何人都可以幫忙!
L
只是爲了說明我不認爲MsmqTransportConfig在NServiceBus 3中是有效的,我敢肯定你需要通過流暢的配置來做到這一點 – 2012-02-17 09:06:17
終端'PlusMaticPublisherInputQueue'在發佈端定義在哪裏? – 2012-02-17 09:45:30
如果使用NServiceBus.Integration配置文件啓動控制檯應用程序,您是否在輸入隊列中看到訂閱消息? – 2012-02-17 12:57:19