Я пытаюсь выяснить способ обновления сборок, используемых нашими worklow выполнения (пользовательские действия) в то время как еще в состоянии загрузить (десериализации) старые экземпляры. Моя ситуация таково:Загрузка предыдущих версий рабочих процессов с помощью новой версии сборки
- есть рабочий экземпляр, созданный и сохранялся с
CustomActivities
v.1.0.0.0 - развернуть новую версию ведьмы продукта имеет
CustomActivities
v.2.0.0.0 - пытается загружать предыдущие рабочие процессы в новую рабочую среду
Разница между v.1 и v.2 заключается в том, что у нас есть дополнительные классы в сборке. Структура для существующих типов не изменилась, поэтому я бы предположил, что двоичная десериализация все равно будет работать. Мы перенаправлять все типы из т.1 в т.2, используя AssemblyResolve
событие
if (args.Name.Contains("CustomActivities"))
{
Type someTypeFromCustomActivities = typeof(WorkflowType);
return someTypeFromCustomActivities.Assembly;
}
Но в какой-то момент в процессе десериализации мы получаем следующее исключение:
SerializationException: объект с ID 153 реализует интерфейс IObjectReference, для которого все зависимости не могут быть разрешены. Вероятная причина - два случая IObjectReference, которые имеют взаимную зависимость друг от друга.
Что может вызывать такое поведение и как мы можем его обойти? Кроме того, если у кого-то есть стратегия для обновления рабочих процессов, которая не предполагает запуск сборочных сборок (старых и новых версий в том же домене приложения), они будут приветствоваться.
Этот блог говорит: > Проверьте, если вы изменили свой рабочий процесс (созданный некоторое новое состояние, например), если это проверить, если база данных настойчивости есть какой-либо сохранялось рабочий процесс в нем. если это может быть ваша проблема, потому что рабочий процесс не может быть снова сериализован. > @AZ Может ли это быть вашим делом? http://brazeta.wordpress.com/2012/01/12/vs-2010-test-assert-inconclusive-exception/ – sethcall
Структура класса/рабочего процесса несколько не изменилась. Также я не могу просто удалить сохраненные данные, потому что это означало бы, что я потеряю активные производственные рабочие процессы –