Ошибка загрузки сохраненного рабочего процесса - PullRequest
0 голосов
/ 13 января 2011

Я запустил и сохранил рабочий процесс, используя операции обмена сообщениями.Корреляция между начальной командой Start и конечной командой Stop работает хорошо, если они отправляются в течение нескольких секунд.Проблемы начинаются, когда рабочий процесс выгружается, потому что следующее сообщение Stop вызывает следующее FaultException:

Если LoadWorkflowByInstanceKeyCommand.AssociateLookupKeyToInstanceId не указан, LookupInstanceKey должен быть уже связан с экземпляром или LoadWorkflowByInstanceKeyПо этой причине недопустимо также указывать LookupInstanceKey в коллекции InstanceKeysToAssociate, если AssociateLookupKeyToInstanceId не установлен

Кто-нибудь может мне помочь?Переменные внутри рабочего процесса имеют типы int и XDocument.Это код для инициализации WorkflowServiceHost:

WorkflowServiceHost serviceHost = new WorkflowServiceHost(myWorkflow, new Uri(serviceUri));
            ServiceDebugBehavior debug = serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
            if (debug == null)
            {
                debug = new ServiceDebugBehavior();
                serviceHost.Description.Behaviors.Add(debug);
            }

            debug.IncludeExceptionDetailInFaults = true;
            WorkflowIdleBehavior idle = serviceHost.Description.Behaviors.Find<WorkflowIdleBehavior>();
            if (idle == null)
            {
                idle = new WorkflowIdleBehavior();
                serviceHost.Description.Behaviors.Add(idle);
            }

            idle.TimeToPersist = TimeSpan.FromSeconds(2);
            idle.TimeToUnload = TimeSpan.FromSeconds(10);
            var behavior = new SqlWorkflowInstanceStoreBehavior
            {
                ConnectionString = ConfigurationManager.ConnectionStrings["WorkflowPersistence"].ConnectionString,
                InstanceEncodingOption = InstanceEncodingOption.None,
                InstanceCompletionAction = InstanceCompletionAction.DeleteAll,
                InstanceLockedExceptionAction = InstanceLockedExceptionAction.BasicRetry,
                HostLockRenewalPeriod = new TimeSpan(00, 00, 30),
                RunnableInstancesDetectionPeriod = new TimeSpan(00, 00, 05)
            };
            serviceHost.Description.Behaviors.Add(behavior);
            serviceHost.Open();

Глядя на базу данных, кажется, что рабочий процесс никогда не приостанавливается.

Любая помощь приветствуется, спасибо

1 Ответ

0 голосов
/ 13 января 2011

Не совсем уверен, что здесь происходит, но похоже, что в рабочем процессе используются типы, которые не могут быть сериализованы и не позволяют сохранить рабочий процесс на диске. Когда вы говорите «Глядя на базу данных, кажется, что рабочий процесс никогда не приостанавливается». Вы действительно имеете в виду отстранение? И почему вы ожидаете, что рабочий процесс будет приостановлен?

Что произойдет, если вы отправите только начальное сообщение в рабочий процесс и подождите 2 секунды? Получаете ли вы новую запись в базе данных постоянства?

...