2010-09-04 5 views
0

Utilisation du pub/sous-échantillon J'ai réussi à obtenir plusieurs instances de la même application de console pour lire tous les messages envoyés par l'éditeur. Ce que je l'ai fait whas ceci:Configuration de Nservicebus dans WPF

namespace Subscriber1 

{ EndpointConfig public class: 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()); 


    } 
} 

}

Comment puis-je configurer une application WPF pour avoir plusieurs instances tous lire les notifications de l'éditeur ??

Utiliser le code ci-dessus ne le fait pas pour moi parce que ces lignes de code ne seront jamais touchées.

Dans mon application WPF je référence l'hôte NServiceBus, j'ajoute ceci au code derrière les fenêtres:

 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(); 
    } 

et je mets le I "OverrideInputQueue: IWantCustomInitialization" -part dans ma config point final. Mais comme je l'ai dit, cette partie n'est jamais touchée. Le résultat est que lorsque vous démarrez deux instances de l'application, elles se relaient pour récupérer le message envoyé par l'éditeur. Je veux que les deux instances reçoivent TOUS les messages.

Qu'est-ce que j'ai manqué?

/Johan

+0

Vous avez créé un consommateur concurrent. Une raison pour laquelle vous voulez seulement une file d'attente et pas une par abonné? –

+0

Exactement. C'est le problème. Pourquoi la méthode Init de la classe "OverrideInputQueue: IWantCustomInitialization" ne s'exécute-t-elle pas? Il le fait dans mon application de console et chaque instance obtient leur file d'attente uniqeu. Donc, il y a quelque chose avec mon installation dans wpf c'est FUBAR. Je ne sais pas quoi. –

Répondre

1

Le problème est que IWantCustomInitialization est pertinent que lors de l'utilisation du processus NServiceBus.Host.exe. Ce que vous devez faire dans votre code d'initialisation est la suivante:

 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

Merci! Je vais essayer ça dès que possible. –

Questions connexes