2012-04-05 3 views
10

Я пытаюсь выяснить способ обновления сборок, используемых нашими worklow выполнения (пользовательские действия) в то время как еще в состоянии загрузить (десериализации) старые экземпляры. Моя ситуация таково:Загрузка предыдущих версий рабочих процессов с помощью новой версии сборки

  1. есть рабочий экземпляр, созданный и сохранялся с CustomActivities v.1.0.0.0
  2. развернуть новую версию ведьмы продукта имеет CustomActivities v.2.0.0.0
  3. пытается загружать предыдущие рабочие процессы в новую рабочую среду

Разница между v.1 и v.2 заключается в том, что у нас есть дополнительные классы в сборке. Структура для существующих типов не изменилась, поэтому я бы предположил, что двоичная десериализация все равно будет работать. Мы перенаправлять все типы из т.1 в т.2, используя AssemblyResolve событие

if (args.Name.Contains("CustomActivities")) 
{ 
    Type someTypeFromCustomActivities = typeof(WorkflowType); 
    return someTypeFromCustomActivities.Assembly; 
} 

Но в какой-то момент в процессе десериализации мы получаем следующее исключение:

SerializationException: объект с ID 153 реализует интерфейс IObjectReference, для которого все зависимости не могут быть разрешены. Вероятная причина - два случая IObjectReference, которые имеют взаимную зависимость друг от друга.

Что может вызывать такое поведение и как мы можем его обойти? Кроме того, если у кого-то есть стратегия для обновления рабочих процессов, которая не предполагает запуск сборочных сборок (старых и новых версий в том же домене приложения), они будут приветствоваться.

+0

Этот блог говорит: > Проверьте, если вы изменили свой рабочий процесс (созданный некоторое новое состояние, например), если это проверить, если база данных настойчивости есть какой-либо сохранялось рабочий процесс в нем. если это может быть ваша проблема, потому что рабочий процесс не может быть снова сериализован. > @AZ Может ли это быть вашим делом? http://brazeta.wordpress.com/2012/01/12/vs-2010-test-assert-inconclusive-exception/ – sethcall

+1

Структура класса/рабочего процесса несколько не изменилась. Также я не могу просто удалить сохраненные данные, потому что это означало бы, что я потеряю активные производственные рабочие процессы –

ответ

2

Событие сборки сборки ничего не делает для изменения ссылок на сборку типов сериализованных типов. Вы пробовали переадресацию сборки на уровне машины с v1 до v2.

Обновление: я нашел эту ссылку, которая рассказывает об использовании переадресации привязки для пересылки старых рабочих процессов в новые версии с использованием атрибута applyTo.

http://msdn.microsoft.com/en-us/library/aa349375.aspx

+0

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

+0

- 1 за не ответ. это могло быть приятным комментарием, хотя –

+0

Я был в аэропорту, когда писал это на своем телефоне, поэтому извиняюсь за краткость и отсутствие ясности и ответ в неправильном месте. –

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