2013-01-22 3 views
2

В моем загрузчике я начать делать это:инициализации NServiceBus неудачу в MVC, когда я прохожу некоторые типы сканирования

public static void Initialise() 
    { 
     var container = BuildUnityContainer(); 

     InitializeNServiceBus(container); 

     DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
     ... 
    } 

И содержание InitializeNServiceBus как это:

private static void InitializeNServiceBus(IUnityContainer container) 
    { 
     var typesToScan = new [] { 
      typeof (RequestPasswordResetCommand), 
      typeof (CreateAccountCommand) 
     }; 

     Configure.With(typesToScan) 
      .DefineEndpointName("somequeueonmysystem") 
      .UnityBuilder(container) 
      .XmlSerializer() 
      //.MsmqSubscriptionStorage() 
      .DisableRavenInstall() 
      .DisableSecondLevelRetries() //we need timeout manager for this 
      .DisableTimeoutManager() //we need raven db or similar for this //.RunTimeoutManager() 
      .MsmqTransport() 
       .IsTransactional(false) 
       .PurgeOnStartup(false) 
      .MsmqSubscriptionStorage() 
       .IsTransactional(true) 
      .UnicastBus() 
       .ImpersonateSender(false) 
      .SendOnly(); 
      //.CreateBus() 
      // .Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install()); 
    }  

Однако, когда я откройте мое приложение MVC. Я получаю:

Статическое свойство требует нулевого экземпляра, для нестатического свойства требуется непустой экземпляр. Имя Параметр: выражение

Источник ошибки указано здесь:

Line 82: 
Line 83:    Configure.With(typesToScan) 
Line 84:     .DefineEndpointName("InCityS.Events.UI.Nuvonet") 
Line 85:     .UnityBuilder(container) 

StackTrace:

[ArgumentException: Static property requires null instance, non-static property requires non-null instance. 
Parameter name: expression] 
    System.Linq.Expressions.Expression.Property(Expression expression, PropertyInfo property) +4114402 
    NServiceBus.Utils.Reflection.DelegateFactory.Create(PropertyInfo property) in c:\TeamCity\buildAgent\work\nsb.master_2\src\utils\NServiceBus.Utils.Reflection\DelegateFactory.cs:91 
    NServiceBus.Serializers.XML.XmlMessageSerializer.InitType(Type t) in c:\TeamCity\buildAgent\work\nsb.master_2\src\impl\Serializers\NServiceBus.Serializers.XML\XmlMessageSerializer.cs:133 
    NServiceBus.Serializers.XML.XmlMessageSerializer.InitType(Type t) in c:\TeamCity\buildAgent\work\nsb.master_2\src\impl\Serializers\NServiceBus.Serializers.XML\XmlMessageSerializer.cs:138 
    NServiceBus.Serializers.XML.XmlMessageSerializer.Initialize(IEnumerable`1 types) in c:\TeamCity\buildAgent\work\nsb.master_2\src\impl\Serializers\NServiceBus.Serializers.XML\XmlMessageSerializer.cs:948 
    NServiceBus.Serializers.XML.Config.MessageTypesInitializer.Run() in c:\TeamCity\buildAgent\work\nsb.master_2\src\impl\Serializers\NServiceBus.Serializers.XML.Config\MessageTypesInitializer.cs:20 
    NServiceBus.Configure.<Initialize>b__d(IWantToRunWhenConfigurationIsComplete o) in c:\TeamCity\buildAgent\work\nsb.master_2\src\config\NServiceBus.Config\Configure.cs:305 
    System.Collections.Generic.List`1.ForEach(Action`1 action) +10722241 
    NServiceBus.Configure.Initialize() in c:\TeamCity\buildAgent\work\nsb.master_2\src\config\NServiceBus.Config\Configure.cs:304 
    NServiceBus.Configure.SendOnly() in c:\TeamCity\buildAgent\work\nsb.master_2\src\config\NServiceBus.Config\Configure.cs:364 
    InCityS.UI.Open.Bootstrapper.InitializeNServiceBus(IUnityContainer container) in d:\Data_nobackup\Projects\InCityS\trunk\UI\InCityS.UI.Open\Bootstrapper.cs:83 
    InCityS.UI.Open.Bootstrapper.Initialise() in d:\Data_nobackup\Projects\InCityS\trunk\UI\InCityS.UI.Open\Bootstrapper.cs:53 
    InCityS.UI.Open.MvcApplication.Application_Start() in d:\Data_nobackup\Projects\InCityS\trunk\UI\InCityS.UI.Open\Global.asax.cs:79 

[HttpException (0x80004005): Static property requires null instance, non-static property requires non-null instance. 
Parameter name: expression] 
    System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9859725 
    System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118 
    System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172 
    System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336 
    System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296 

[HttpException (0x80004005): Static property requires null instance, non-static property requires non-null instance. 
Parameter name: expression] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9873912 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254 

Когда меняется typesToScan к

var typesToScan = new Type[]{}; 

приложение снова работает, но, разумеется, чтобы что-то на шине не получилось, говоря, что он не знает тип через сканированные типы.

Кто-нибудь знает, где искать или иметь опыт работы с этой ошибкой?

ответ

1

Неисправность обнаружена. В одном из сообщений, которые я добавил через типы для сканирования, было свойство, которое было op type «CultureInfo», которое не очень хорошо сочетается с сериализацией.

namespace InCityS.BL.Account.Messages 
{ 
    public class CreateAccountCommand : ICommand 
    { 
     public string UserName { get; set; } 
     public string Password { get; set; } 

     public string FirstName { get; set; } 
     public string LastName { get; set; } 

     public CultureInfo Culture { get; set; } 
    } 
} 

был заменен:

namespace InCityS.BL.Account.Messages 
{ 
    public class CreateAccountCommand : ICommand 
    { 
     public string UserName { get; set; } 
     public string Password { get; set; } 

     public string FirstName { get; set; } 
     public string LastName { get; set; } 

     public string Culture { get; set; } 
    } 
}