2012-12-18 1 views
0

J'utilise NServiceBus 3.3.3. J'utilise Ninject comme mon conteneur et j'initialisant le bus dans un module en se liant à la méthode suivante:Transport nul lors de la tentative de démarrage de l'instance NServiceBus dans le service WCF

projet
Bind<IBus>().ToMethod(context => 
{ 
    return CreateBus(); 
}).InSingletonScope(); 



private IBus CreateBus() 
{ 
    var bus = NServiceBus.Configure.With() 
    .NinjectBuilder(this.Kernel) 
    .DefineEndpointName("MyEndpointName") 
    .MsmqTransport() 
    .IsTransactional(true) 
    .PurgeOnStartup(false) 
    .DisableRavenInstall() 
.DisableTimeoutManager() 
    .InMemorySubscriptionStorage() 
    .XmlSerializer() 
    .UnicastBus() 
    .ImpersonateSender(false) 
    .CreateBus(); 

    return bus.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install()); 
} 

Le même code fonctionne très bien dans un autre (MVC4) mais dans mon WCF était le service Je semble que le membre transport de UnicastBus est toujours nul et ainsi la ligne 824 transport.MaxThroughputPerSecond = license.MaxThroughputPerSecond; tombe.

La référence d'objet n'est pas définie sur une instance d'un objet. à NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start (Action startupAction) dans c: \ TeamCity \ BuildAgent \ work \ nsb.master_2 \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs: ligne 824 à Accès .Cloud.WebService.Modules.NServiceBusModule.CreateBus() dans l: \ Projects \ aCloud \ InsightIntegration \ Access.Cloud.WebService \ Modules \ NServiceBusModule.cs: ligne 47 à Access.Cloud.WebService.Modules.NServiceBusModule. b__0 (contexte IContext ) dans l: \ Projects \ aCloud \ InsightIntegration \ Access.Cloud.WebService \ Modules \ NServiceBusModule.cs: ligne 25 à Ninject.Activation.Provider'1.Create (IContext contexte) dans c: \ Projets \ Ninject \ ninject \ src \ Ninjet \ Activation \ Prov ider.cs: ligne 38 à Ninject.Activation.Context.Resolve() dans c: \ Projects \ Ninject \ ninject \ src \ Ninjet \ Activation \ Context.cs: ligne 157 à System.Linq.Enumerable.WhereSelectEnumerableIterator2. MoveNext()
à System.Linq.Enumerable.SingleOrDefault [TSource] (IEnumerable`1 source) à System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext()

Je l'ai vérifié dans le débogueur aussi et bien sûr transport est nul.

Je suppose que c'est quelque chose d'environnemental mais je suppose que le transport vient juste de certaines liaisons qui sont mises en place lorsque MsmqTransport() est appelée. J'ai essayé de déplacer le code qui charge le module depuis le Web Boottrapper de Ninject vers Global.asax mais cela n'a pas fait de différence.

Toute aide ou conseil apprécié!

+0

Je pensais ajouter qu'il semble être sans rapport avec au type de constructeur utilisé et fait exactement la même chose quand 'DefaultBuilder()' est utilisé. – mackie

+0

Je me demande si WAS cause des problèmes avec l'analyse d'assemblage. Pouvez-vous essayer de transmettre explicitement une liste d'assemblys pertinents à Configure.With()? –

+0

@ AndreasÖhlund Ce problème semble avoir disparu depuis que j'ai mis à jour en 3.3.4 et modifié le point de terminaison en question à SendOnly. Si j'ai des problèmes similaires à l'avenir, je vais essayer la méthode explicite. Merci pour votre aide :) La solution est maintenant opérationnel dans les tests d'intégration et fonctionne comme un charme: D – mackie

Répondre

3

Le problème est que vous utilisez cette méthode pour créer votre référence au bus. La méthode que vous utilisez doit être appelée une fois au démarrage du processus et c'est tout.

Le correctif serait de stocker la variable de bus dans un champ sur cette classe, et ensuite utiliser ce champ dans l'enregistrement de votre récipient comme celui-ci:

Bind<IBus>().ToMethod(context => 
{ 
    return bus; 
}).InSingletonScope(); 
+0

Merci pour la réponse rapide Udi. Cela ne semble pas important de savoir comment je le fais, cela se produit indépendamment du conteneur qu'il semble.J'ai changé mon code pour le dessus (je gardais une référence statique de toute façon) et ça s'est encore produit. Le plus curieux! – mackie

+0

Est-ce que tous les échantillons fonctionnent pour vous? –

+0

Les échantillons fonctionnent et le bus s'initialise correctement dans un autre projet Web dans la même solution. – mackie

Questions connexes