Как решить эту проблему (в WF4):
Я создаю рабочий процесс в xaml и запускаю несколько экземпляров его, у меня есть persistancestore, и все рабочие процессы сохраняют на закладке половину путем их рабочего процесса.
Теперь я останавливаю приложение
Если я перезапускаю te приложение, все возобновляется, en приятно завершается.
Но что, если я хочу изменить определение рабочего процесса после того, как рабочие экземпляры сохраняются? единственным способом загрузить рабочие рабочие процессы (что я смог найти) является следующий путь:
WorkflowApplication wfapp = new WorkflowApplication(new WorkflowDefinition());
wfapp.InstanceStore = new SqlWorkflowInstanceStore(connStr);
wfapp.Load(wfGuid);
Таким образом, Вам нужно определение рабочего процесса, если оно изменилось во время постоянства, дела идут ужасно неправильно.
Что лучший способ состоит в том, чтобы решить это?
Этот сценарий представляет собой небольшую проблему. Невозможно перенести старое определение рабочего процесса в новый формат. Я провел ограниченное тестирование и некоторые сценарии с добавлением/удалением действий, которые там, где еще не выполнялись, работали нормально. Но затем у меня также есть сценарии, которые идут плохо, в том числе повторное выполнение уже завершенных действий.
Насколько я знаю, нет никакого хорошего способа решить проблему, кроме отслеживания версии XAML / сборки, используемой для создания рабочего процесса и проверки, что, когда вы хотите перезапустить рабочий процесс, чтобы определить версию рабочего процесса для использования.
NDepend, я использую его и его лучшее для этой цели. Проверьте следующее: http://www.codeproject.com/KB/dotnet/NDepend.aspx
-121--787210-И чтобы ответить на вопрос, который вы не задавали, эквивалент Haskell связывания монады «последовательности» в C # называется Подробнее об этом см. в статье Уэса Дайера:
http://blogs.msdn.com/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx
-121--872960-Это не столько проблема Windows Workflow, сколько служба сохранения SQL. Можно создать собственную службу персистентности, которая сможет справиться с этой ситуацией, либо поддерживая преобразование старого рабочего процесса в новый рабочий процесс, либо что-то более абстрактное, например службу персистентности, которая сериализуется как XML/JSON, что может легче поддерживать десериализацию одной версии как другой.