Образец исключения NES (.NET Event Sourcing) (с использованием NServiceBus 2.0)

Я использую образец NES, который работает из коробки. Затем я заменил версию NServiceBus 2.5 на более старую версию 2.0, но это приводит к следующей ошибке при запуске приложения MVC:

"В экземпляре объекта не задана ссылка на объект." в NES.EventConverterFactory..ctor() в NES.DI.‹.cctor>b_6() в C:\Users\werner\Downloads\elliotritchie-NES-9a56ad8\elliotritchie-NES-9a56ad8\src\NES \DI.cs:строка 24 в NES.DependencyInjectionContainer.ResolveTService в C:\Users\werner\Downloads\elliotritchie-NES-9a56ad8\elliotritchie-NES-9a56ad8\src\NES\DependencyInjectionContainer.cs:строка 20 в NES.DependencyInjectionContainer. ‹>c_DisplayClass42.<Register>b__3() in C:\Users\werner\Downloads\elliotritchie-NES-9a56ad8\elliotritchie-NES-9a56ad8\src\NES\DependencyInjectionContainer.cs:line 45 at NES.DependencyInjectionContainer.Resolve[TService]() in C:\Users\werner\Downloads\elliotritchie-NES-9a56ad8\elliotritchie-NES-9a56ad8\src\NES\DependencyInjectionContainer.cs:line 20 at NES.DependencyInjectionContainer.<>c__DisplayClassa4.b_9() в C:\Users\werner\Downloads\elliotritchie-NES-9a56ad8\elliotritchie-NES-9a56ad8\src\NES\DependencyInjectionContainer.cs:строка 59 на NES .DependencyInjectionContainer.ResolveTService в C:\Users\werner\Downloads\elliotritchie-NES-9a56ad8\elliotritchie-NES-9a56ad8\src\NES\DependencyInjectionContainer.cs:строка 20 в NES.DependencyInjectionContainer.‹>c_DisplayClass4` 2.b__3() в C:\Users\werner\Downloads\elliotritchie-NES-9a56ad8\elliotritchie-NES-9a56ad8\src\NES\DependencyInjectionContainer.cs:строка 45 в NES.DependencyInjectionContainer.ResolveTService i n C:\Users\werner\Downloads\elliotritchie-NES-9a56ad8\elliotritchie-NES-9a56ad8\src\NES\DependencyInjectionContainer.cs:строка 20 в NES.UnitOfWorkFactory.Begin() в C:\Users\werner\Downloads\ elliotritchie-NES-9a56ad8\elliotritchie-NES-9a56ad8\src\NES\UnitOfWorkFactory.cs:строка 18 в NES.NServiceBus.MessageModule.HandleBeginMessage() в C:\Users\werner\Downloads\elliotritchie-NES-9a56ad8\elliotritchie- NES-9a56ad8\src\NES\NServiceBus\MessageModule.cs:строка 10 в NServiceBus.Unicast.UnicastBus.TransportStartedMessageProcessing(отправитель объекта, EventArgs e) в NServiceBus.Unicast.Transport.Msmq.MsmqTransport.ReceiveFromQueue() в NServiceBus.Unicast. Транспорт.Msmq.MsmqTransport.Процесс()

Теперь это происходит, когда Global.asax.cs попадает в «AreaRegistration.RegisterAllAreas();». В конце концов, ошибка возникает в строке 13 «EventConverterFactory.cs», где статический конструктор пытается выполнить итерацию «Global.TypesToScan», который имеет значение null.

Кто-нибудь знает, как запустить этот образец? Странно, что точно такой же код работает со сборками NSB 2.5...

Вернер


person Werner    schedule 16.09.2011    source источник
comment
Привет, Вернер, я скомпилировал исходный код NSB v2.0 для .NET 4 и запустил образец NES с этими библиотеками DLL и не могу воспроизвести ошибку, которую вы получаете. Есть ли какие-либо изменения в примерах проектов, кроме ссылки на старые библиотеки DLL NSB?   -  person Elliot Ritchie    schedule 17.09.2011
comment
Привет, Эллиот, я только что вытащил последнюю версию NES и убедился, что все, что я изменил, — это сборки NSB во всех трех проектах: NES, NES.Sample и NES.Sample.Web. Та же ошибка. Возможно проблема с NSB, я использую 2.0.0.1329. Странный.   -  person Werner    schedule 19.09.2011
comment
Нет, последний 2.0 (2.0.0.1330) делает то же самое. Я не понимаю, как это может работать для вас. Какую версию NSB вы используете?   -  person Werner    schedule 19.09.2011
comment
Я использовал ветку v2.0 на GitHub. Я только что попробовал еще раз с загрузкой v2.0.0.1219 на NServiceBus.com, и образец NES по-прежнему выглядит нормально.   -  person Elliot Ritchie    schedule 19.09.2011
comment
Да у меня тоже заработало. Кажется, что обработка NSB CompletionMessage отличается от 2.0->2.5. И именно обработка CompletionMessage вызывает ошибку. Я добавил .NES() в NES.Sample.Web, и теперь он работает. Это неизмененный образец NES. Таким образом, ошибки, которые я видел после добавления конфигурации NES ранее, не связаны с NES. Спасибо!   -  person Werner    schedule 19.09.2011


Ответы (1)


Похоже, что сообщение обрабатывается в конечной точке, которая не была инициализирована с расширением .NES().

person Elliot Ritchie    schedule 17.09.2011
comment
Да, это тоже был мой вывод, поскольку коллекция типов устанавливается при указании .NES(). И неудачный проект — это NES.Sample.Web, в котором действительно отсутствует эта конфигурация. Но проект работает с использованием NSB 2.6, так что это не может быть правильным решением? Если я укажу .NES(), это даст мне еще одно исключение, поэтому я не отказался от этого пути... - person Werner; 19.09.2011
comment
Да, добавление .NES() в конфигурацию NSB решает эту проблему. Похоже, что CompletionMessage обрабатывается иначе, чем в NSB 2.0->2.5. Это неизмененный образец NES. Таким образом, ошибки, которые я видел после добавления конфигурации NES ранее, не происходят из NES. Спасибо! - person Werner; 19.09.2011