2014-07-17 4 views
0

Je reçois une erreur intéressante. J'ai mis à jour à la fois Castle et NServiceBus. Castle utilisait la version 3, utilisant maintenant la version 3.3.1. NServiceBus utilisait 3.2.7 et utilise maintenant 4.6.1.Problème de configuration après la mise à niveau de NServiceBus vers 4.6.1

Ma configuration

/// <summary> 
/// Castle Windsor Installer for NServiceBus 
/// </summary> 
public class NServiceBusInstaller : IWindsorInstaller { 

    public void Install(IWindsorContainer container, IConfigurationStore store) { 

     Configure.Serialization.Xml(); 

     Configure.With() 
      .CastleWindsorBuilder(container) 
      .UseTransport<Msmq>() 
      .UnicastBus() 
      .SendOnly(); 
    } 

} 

L'erreur que je reçois est la suivante:

Component NServiceBus.Scheduling.ScheduledTaskMessageHandler a mode de vie lié, mais il ne précise pas obligatoire 'scopeRootSelector'.

Si quelqu'un a une idée de ce que je dois changer, s'il vous plaît faites le moi savoir. J'ai essayé de regarder à travers toutes les options de configuration et je ne suis pas sûr de ce qui me manque. C'est sur une interface web à un service où l'interface Web et le service sont hébergés dans deux endroits différents. L'interface Web ne prend que les informations de l'utilisateur et envoie des messages à traiter sans valeur de retour attendue. C'est pourquoi je l'ai défini comme une config SendOnly.

MISE À JOUR: Voici les informations demandées par Sean Farmar.

private static IWindsorContainer _container; 


private static void BootstrapContainer() { 

    _container = new WindsorContainer().Install(FromAssembly.This()); 

    var controllerFactory = new WindsorControllerFactory(_container.Kernel); 
    ControllerBuilder.Current.SetControllerFactory(controllerFactory); 
} 


/// <summary> 
/// IOC instructions to load Controllers via Castle.Windsor 
/// </summary> 
public class WindsorControllerFactory : DefaultControllerFactory { 

    private readonly IKernel _kernel; 

    public WindsorControllerFactory(IKernel kernel) { 
     _kernel = kernel; 
    } 

    public override void ReleaseController(IController controller) { 
     _kernel.ReleaseComponent(controller); 
    } 

    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) { 
     if (controllerType == null) { 
      throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", 
       requestContext.HttpContext.Request.Path)); 
     } 
     return (IController)_kernel.Resolve(controllerType); 
    } 
} 

/// <summary> 
/// Castle Windsor Installer for Controllers 
/// </summary> 
public class ControllersInstaller : IWindsorInstaller { 

    public void Install(IWindsorContainer container, IConfigurationStore store) { 

     container.Register(Classes.FromThisAssembly() 
      .BasedOn<IController>() 
      .LifestyleTransient()); 

    } 
} 

/// <summary> 
/// Facility to configure NHibernate 
/// </summary> 
public class PersistenceFacility : AbstractFacility { 

    protected override void Init() { 
     var config = BuildDatabaseConfiguration(); 

     Kernel.Register(
      Component.For<ISessionFactory>() 
       .UsingFactoryMethod(_ => config.BuildSessionFactory()), 
      Component.For<ISession>() 
       .UsingFactoryMethod(x => x.Resolve<ISessionFactory>().OpenSession()) 
       ); 
    } 

    private NHibernate.Cfg.Configuration BuildDatabaseConfiguration() { 
     return Fluently.Configure() 
      .Database(SetupDatabase()) 
      .Mappings(x => x.FluentMappings.AddFromAssemblyOf<ClientServicesUploadsMap>()) 
      .BuildConfiguration(); 
    } 

    protected virtual IPersistenceConfigurer SetupDatabase() { 
     return MsSqlConfiguration.MsSql2005.ConnectionString(
      c => c.FromConnectionStringWithKey("workflow")); 
    } 

} 

/// <summary> 
/// Castle Windsor Facility Installer 
/// </summary> 
public class FacilityInstaller : IWindsorInstaller { 

    public void Install(IWindsorContainer container, IConfigurationStore store) { 
     container.AddFacility<PersistenceFacility>(); 
    } 
} 

/// <summary> 
/// Castle Windsor Installer for Repositories 
/// </summary> 
public class RepositoriesInstaller : IWindsorInstaller { 

    public void Install(IWindsorContainer container, IConfigurationStore store) { 
     container.Register(Classes.FromAssemblyContaining<ClientServicesUploadsRepository>()       .Where(Component.IsInSameNamespaceAs<ClientServicesUploadsRepository>()) 
         .WithService.DefaultInterfaces() 
         .LifestyleTransient() 
      ); 
    } 
} 

/// <summary> 
/// Castle Windsor Installer for NServiceBus 
/// </summary> 
public class NServiceBusInstaller : IWindsorInstaller { 

    public void Install(IWindsorContainer container, IConfigurationStore store) { 

     Configure.Serialization.Xml(); 

     Configure.With() 
      .CastleWindsorBuilder(container) 
      .UseTransport<Msmq>() 
      .UnicastBus() 
      .SendOnly(); 
    } 

Erreur de serveur dans l'application '/ ClientServices'.


Component NServiceBus.Scheduling.ScheduledTaskMessageHandler a mode de vie lié, mais il ne précise pas obligatoire 'scopeRootSelector'. Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails d'exception: Castle.MicroKernel.ComponentRegistrationException: Le composant NServiceBus.Scheduling.ScheduledTaskMessageHandler a un mode de vie lié mais il ne spécifie pas obligatoire 'scopeRootSelector'.

Erreur Source:

Ligne 191: Configure.Serialization.Xml(); Ligne 192: Ligne 193 : Configure.With() Ligne 194: .CastleWindsorBuilder (conteneur) Ligne 195: .UseTransport()

Source fichier: C: \ ClientServices \ trunk \ src \ UI \ Global. asax.cs ligne: 193

Stack Trace:

[ComponentRegistrationException. Component NServiceBus.Scheduling.ScheduledTaskMessageHandler a mode de vie lié, mais il ne précise pas obligatoire 'scopeRootSelector'] Castle.MicroKernel.DefaultKernel.CreateScopeAccessorForBoundLifestyle (ComponentModel modèle) +212 Castle.MicroKernel.DefaultKernel.CreateLifestyleManager (modèle ComponentModel, l'activateur IComponentActivator) +182 Castle.MicroKernel.Handlers.DefaultHandler.InitDependencies() 148 Castle.MicroKernel.Handlers.AbstractHandler.Init (kernel IKernelInternal) 171 Castle. MicroKernel.Handlers.DefaultHandlerFactory.Create (modèle ComponentModel) 71 Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.CreateHandler (modèle ComponentModel) 133 Castle.MicroKernel.DefaultKernel.AddCustomComponent (modèle ComponentModel) 50 Castle. MicroKernel.Registration.ComponentRegistration 1.Castle.MicroKernel.Registration.IRegistration.Register(IKernelInternal kernel) +267 Castle.MicroKernel.DefaultKernel.Register(IRegistration[] registrations) +178 Castle.Windsor.WindsorContainer.Register(IRegistration[] registrations) +59 NServiceBus.ObjectBuilder.CastleWindsor.WindsorObjectBuilder.NServiceBus.ObjectBuilder.Common.IContainer.Configure(Type concreteComponent, DependencyLifecycle dependencyLifecycle) in y:\BuildAgent\work\31f8c64a6e8a2d7c\src\ObjectBuilder.CastleWindsor\WindsorObjectBuilder.cs:89 NServiceBus.ObjectBuilder.Common.CommonObjectBuilder.ConfigureComponent(Type concreteComponent, DependencyLifecycle instanceLifecycle) in y:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\ObjectBuilder\Common\CommonObjectBuilder.cs:54 NServiceBus.Unicast.Config.ConfigUnicastBus.ConfigureMessageHandlersIn(IEnumerable 1 types) dans y: \ BuildAgent \ work \ 31f8c64a6e8a2d7c \ src \ NServiceBus.Core \ Unicast \ Config \ ConfigUnicastBus.cs: 164 NServiceBus.Unicast.Config.ConfigUnicastBus.LoadMessageHandlers (IEnumerable 1 orderedTypes) in y:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Config\ConfigUnicastBus.cs:147 NServiceBus.Unicast.Config.ConfigUnicastBus.LoadMessageHandlers() in y:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Config\ConfigUnicastBus.cs:98 NServiceBus.EnsureLoadMessageHandlersWasCalled.Init() in y:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\ConfigureUnicastBus.cs:49 NServiceBus.Configure.<Initialize>b__10(INeedInitialization t) in y:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Configure.cs:350 NServiceBus.<>c__DisplayClass23 1.b__20 (type T) en y: \ BuildAgent \ work \ 31f8c64a6e8a2d7c \ src \ NServiceBus.Core \ Configure.cs: 555 System.Collections.Generic.List 1.ForEach(Action 1 action) +11010045 NServiceBus.Configure.ForAllTypes (action 1 action) in y:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Configure.cs:379 NServiceBus.Configure.ActivateAndInvoke(Action une action Nullable`1 thresholdForWarning) dans y: \ BuildAgent \ work \ 31f8c64a6e8a2d7c \ src \ NServiceBus.Core \ Configure.cs: 549 NServiceBus.Configure.Initialize() dans y: \ BuildAgent \ work \ 31f8c64a6e8a2d7c \ src \ NServiceBus.Core \ Configure.cs : 350 NServiceBus.ConfigureExtensions.SendOnly (Configurer la configuration) dans y: \ BuildAgent \ work \ 31f8c64a6e8a2 d7c \ src \ NServiceBus.Core \ Config \ ConfigureExtensions.cs: 18 Lsr.ClientServices.UI.NServiceBusInstaller.Install (conteneur IWindsorContainer, magasin IConfigurationStore) dans C: \ ClientServices \ trunk \ src \ UI \ Global.asax.cs: 193 Castle.Windsor.Installer.AssemblyInstaller.Install (conteneur à IWindsorContainer, magasin IConfigurationStore) +229 Castle.Windsor.WindsorContainer.Install (IWindsorInstaller [] installateurs, portée DefaultComponentInstaller) 165 Castle.Windsor.WindsorContainer.Install (IWindsorInstaller [ installeurs) +227 Lsr.ClientServices.UI.MvcApplication.BootstrapContainer() dans C: \ ClientServices \ trunk \ src \ UI \ Global.asax.cs: 52 Lsr.ClientServices.UI.MvcApplication.Application_Start() dans C : \ ClientServices \ trunk \ src \ UI \ Global.asax.cs: 44

+0

À quoi ressemble le code de configuration du conteneur? –

Répondre

0

Lors de l'application de DLL pour Castle, j'ai choisi par erreur les DLL du dossier "Net40-Client". Lors de la réévaluation de tout, j'ai décidé de choisir les DLL du dossier "Net40" et ils ont fonctionné. Cela a appliqué à Castle.Windsor.DLL et Castle.Facilities.FactorySupport.DLL. D'après ce que je comprends, la seule différence entre le client et le non-client est que la version du client inclut des références à ASP.NET. Si c'est la seule différence, je n'ai aucune idée de la raison pour laquelle je recevais des problèmes. Quoi qu'il en soit, le passage aux DLL "Net40" a résolu mon problème et je ne reçois plus l'erreur scopeRootSelector.

Questions connexes