2010-09-04 2 views
0

Используя образец pub/sub, мне удалось получить несколько экземпляров одного и того же консольного приложения, чтобы прочитать все сообщения, отправленные издателем. То, что я сделал WHAS это:Конфигурация Nservicebus в WPF

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, я добавляю это в окне коды позади:

 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» -часть в моей конечной конфигурации.

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

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

/Johan

+0

Вы создали конкурирующего потребителя. По какой причине вы хотите только одну очередь, а не одну на абонента? –

+0

Точно. Это проблема. Почему не выполняется метод Init класса OverrideInputQueue: IWantCustomInitialization. Это происходит в моем консольном приложении, и каждый экземпляр получает свою очередь uniqeu. Итак, есть что-то с моей настройкой в ​​wpf, это FUBAR. Я просто не знаю, что. –

ответ

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(); 
+0

Спасибо! Я попробую это как можно скорее. –