как часть более сложного проекта, мы работаем над нашим собственным уровнем персистентности рабочего процесса для основы рабочего процесса.
Я получил нагрузку и сохранил запущенный процесс, но у меня возникла проблема, которая вернула только непригодные рабочие процессы.Я застрял где-то и просто не вижу, где.
Любой рабочий процесс, который я загружаю, загружается так:
WorkflowApplication wf2App = new WorkflowApplication(new WorkflowInstanceStoreTestsSimplePersistence());
wf2App.InstanceStore = store;
wf2App.Load(wfApp.Id);
Это выглядит хорошо - я возвращаю рабочий процесс.Я подключаю обработчики, и когда я запускаю Run () ... я получаю ...
... Прервать.
Причина:
Ошибка обработки текущего рабочего элемента привела к прерыванию рабочего процесса.Подробности см. Во внутреннем исключении.
Внутреннее исключение:
Реализация InstanceStore поставщика сохраняемости не поддерживает команду с именем {urn: schemas-microsoft-ком: System.Activities.Persistence / команда} SaveWorkflow.Либо выберите другого поставщика, либо убедитесь, что эта команда сохранения не была выполнена.
Реальная проблема заключается в том, что я не вижу этого в моей реализации.Я просто никогда не возвращаю сообщение об ошибке, и каждый вызов обработчика команд возвращается без ошибок.
Трассировка стека также не помогает:
at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.Runtime.DurableInstancing.InstancePersistenceContext.ExecuteAsyncResult.End(IAsyncResult result)
at System.Runtime.DurableInstancing.InstancePersistenceContext.EndOuterExecute(IAsyncResult result)
at System.Runtime.DurableInstancing.InstanceStore.EndExecute(IAsyncResult result)
at System.Activities.WorkflowApplication.PersistenceManager.EndSave(IAsyncResult result)
at System.Activities.WorkflowApplication.UnloadOrPersistAsyncResult.OnPersisted(IAsyncResult result)
at System.Runtime.AsyncResult.SyncContinue(IAsyncResult result)
at System.Activities.WorkflowApplication.UnloadOrPersistAsyncResult.Persist()
at System.Activities.WorkflowApplication.UnloadOrPersistAsyncResult.CollectAndMap()
at System.Activities.WorkflowApplication.UnloadOrPersistAsyncResult.Track()
at System.Activities.WorkflowApplication.UnloadOrPersistAsyncResult.EnsureProviderReadyness()
at System.Activities.WorkflowApplication.UnloadOrPersistAsyncResult.InitializeProvider()
at System.Activities.WorkflowApplication.UnloadOrPersistAsyncResult..ctor(WorkflowApplication instance, TimeSpan timeout, PersistenceOperation operation, Boolean isWorkflowThread, Boolean isInternalPersist, AsyncCallback callback, Object state)
at System.Activities.WorkflowApplication.BeginInternalPersist(PersistenceOperation operation, TimeSpan timeout, Boolean isInternalPersist, AsyncCallback callback, Object state)
at System.Activities.WorkflowApplication.OnBeginPersist(AsyncCallback callback, Object state)
at System.Activities.Runtime.ActivityExecutor.PersistenceWaiter.PersistWorkItem.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)
Все мои командные операции находятся в переопределении InstanceStore дляTryCommand, и он просто работает без ошибок.
Обработчик для SaveWorkflowCommand:
void Pro
cessSaveWorkflow (InstancePersistenceContext context, SaveWorkflowCommand command)
{
if (command.CompleteInstance)
{
DataStore.DeleteInstance(context.InstanceView.InstanceId);
DataStore.DeleteInstanceAssociation(context.InstanceView.InstanceId);
return;
}
if (command.InstanceData.Count > 0 || command.InstanceKeyMetadataChanges.Count > 0)
{
if (!DataStore.SaveAllInstanceData(context.InstanceView.InstanceId, command))
{
DataStore.SaveAllInstanceMetaData(context.InstanceView.InstanceId, command);
}
if (command.InstanceKeysToAssociate.Count > 0)
{
foreach (var entry in command.InstanceKeysToAssociate)
{
DataStore.SaveInstanceAssociation(context.InstanceView.InstanceId, entry.Key, false);
}
}
return;
}
}
и работает без проблем (вызовы хранилища данных, которые я не выполняюопубликуйте здесь).
Я начинаю подозревать, я могу забыть какой-нибудь вызов, чтобы установить статус ok, но я следую примерам из Pro WF (для 4.0) (книга), и он просто не работает.
У кого-нибудь есть идея?