2013-08-26 2 views
1

Я использую «настраиваемый» построитель объектов (Autofac), поэтому я могу повторно использовать регистрацию многих типов, которые я сделал в общей сборке. Когда я запускаю службу, размещенную в NServiceBus.Host.exe, я получаю следующее сообщение об ошибке:NServiceBus IOC Сериализация Исключение

SerializationException был необработанный:

Типа 'Autofac.Core.Registration.ComponentNotRegisteredException' в сборе «Autofac, Version = 3,0 .0.0, Culture = neutral, PublicKeyToken = 17863af14b0044da 'не помечен как сериализуемый.

Это кажется странным для меня, потому что NServiceBus использует Autofac по умолчанию и не имеет этой же проблемы.

Я использую Autofac V 3.1.1 и 4.0.3 NServiceBus

+0

Вы используете несколько 'AppDomains'? Исключения сериализуются через границы, так что это может быть причиной отказа из-за отсутствия атрибута сериализации. Однако я согласен с @ Travis-illig, основная проблема, вероятно, связана с отсутствием регистрации. –

ответ

3

Это правда, что ComponentNotRegisteredException не отмечен сериализации - Библиотеки Portable Class не поддерживают SerializableAttribute и Autofac 3.0+ является PCL.

Я предполагаю, что большая проблема, с которой вы столкнулись, - это не так, как проблема, вызывающая ее, - что-то в вашем пользовательском коде не зарегистрировано, поэтому, когда какой-то тип становится разрешенным, t, и, таким образом, Autofac выбрасывает ComponentNotRegisteredException, а NServiceBus пытается сериализовать его.

Вместо того чтобы пытаться решить проблему сериализации, я бы начал смотреть на источник ComponentNotRegisteredException и сосредоточиться на этом.

+0

Я собираюсь изучить это и продолжить расследование. – Flea

+0

Как оказалось, это была не одна из моих зависимостей, которые не были зарегистрированы должным образом; это был один из NServiceBus (когда он регистрировал синглтон). Я смог лучше реализовать свою оболочку этого метода, и теперь он работает. Спасибо за предложение. Кроме того, ответ Джона Симмонса был очень полезен для решения проблемы. Я тоже хотел бы дать ему ответ, но может выбрать только один. – Flea

2

Простейший способ диагностики таких проблем - включить перерыв во всех исключениях в Visual Studio и посмотреть, где он вылетает в первый раз.
9/10 - проблема с кодом инициализации.

+0

Я сейчас работаю над вашим предложением. – Flea

+1

Проблема возникает, когда она не возникает в dev, но только в производстве, у клиентов. Отладка не заменяется угадыванием, поскольку нет никакой разумной информации, которая выходит за исключение. –

0

Я столкнулся с подобной ошибкой при добавлении NServiceBus.Distributor.Msmq (4.4.2) к старому решению с использованием NServiceBus 4.4.2. Оказалось, что я забыл создать лицензию NSB для нового проекта. Попытка запустить дистрибутор бросила это, пока я не включил в файл сборки действительный файл License.xml:

Необработанное исключение: System.Runtime.Serialization.SerializationException: Введите 'Autofac.Core.DependencyResolutionException' в сборке 'NServiceBus.Core , Версия = 4.4.0.0, Культура = нейтральная PublicKeyToken = 9fc386479f8a226c 'не помечена как сериализуемая.

Смежные вопросы