WPF中的Nservicebus配置

时间:2010-09-04 06:50:10

标签: wpf nservicebus instances

使用pub / sub示例我设法获取同一控制台应用程序的多个实例,以读取发布者发送的所有消息。我做了什么呢:

namespace Subscriber1

{     public class EndpointConfig:IConfigureThisEndpoint,AsA_Server     {     }

public class OverrideInputQueue : IWantCustomInitialization
{
    public void Init()
    {
        Configure
            .Instance
            .Configurer
            .ConfigureComponent<MsmqTransport>(NServiceBus.ObjectBuilder.ComponentCallModelEnum.None)
            .ConfigureProperty(p => p.InputQueue, Guid.NewGuid());


    }
}

}

如何设置wpf应用以让多个实例从发布者那里读取所有通知?

使用上面的代码并不适合我,因为这些代码行永远不会被命中。

在我的wpf应用程序中,我引用了NServiceBus主机,我将其添加到后面的windows代码中:

        public Window1()
    {
        InitializeComponent();
        this.Title = App.AppId.ToString();

        var bus = NServiceBus.Configure.With()
                .DefaultBuilder()
                .XmlSerializer()
                .MsmqTransport()
                    .IsTransactional(true)
                    .PurgeOnStartup(false)
                .UnicastBus()
                    .ImpersonateSender(false)
                    .LoadMessageHandlers()
                .CreateBus()
                .Start();
    }

我把I“OverrideInputQueue:IWantCustomInitialization”-part放在我的端点配置中。

但正如我所说那部分永远不会被击中。结果是,当您启动应用程序的两个实例时,他们轮流接收发布者发送的消息。我希望两个实例都能收到所有消息。

我错过了什么?

/约翰

1 个答案:

答案 0 :(得分:1)

问题是IWantCustomInitialization仅在使用NServiceBus.Host.exe进程时才有意义。您需要在初始化代码中执行的操作是:

        var bus = NServiceBus.Configure.With() 
            .DefaultBuilder() 
            .XmlSerializer() 
            .MsmqTransport() 
                .IsTransactional(true) 
                .PurgeOnStartup(false) 
            .RunCustomAction( () => Configure.Instance.Configurer.ConfigureProperty<MsmqTransport>(p => p.InputQueue, Guid.NewGuid()) )
            .UnicastBus() 
                .ImpersonateSender(false) 
                .LoadMessageHandlers() 
            .CreateBus() 
            .Start();