Конфигурация Nservicebus в WPF - PullRequest
       20

Конфигурация Nservicebus в WPF

0 голосов
/ 04 сентября 2010

Используя пример pub / sub, мне удалось получить несколько экземпляров одного и того же консольного приложения для чтения всех сообщений, отправленных издателем. Что я сделал, это:

namespace Subscriber1

{ открытый класс 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();
    }

и я включил часть "OverrideInputQueue: IWantCustomInitialization" в конфигурацию моей конечной точки.

Но, как я уже сказал, эта часть никогда не получит удар. В результате при запуске двух экземпляров приложения они по очереди выбирают сообщение, отправленное издателем. Я хочу, чтобы оба экземпляра получали ВСЕ сообщения.

Что я пропустил?

/ Йохан

1 Ответ

1 голос
/ 06 сентября 2010

Проблема в том, что 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(); 
...