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
projetBind<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é!
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
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()? –
@ 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