Устойчивость рабочего процесса Windows завершена не имеет значения 1, всегда 0

С помощью этой статьи я создал образец рабочего процесса для определения числа в.net 4.6.1 и включил постоянство.

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

 [System.Activities.DurableInstancing].[InstancesTable] 

После выполнения рабочего процесса (число угадано правильно), если я перейду в базу данных и наблюдаю за таблицей, она все равно будет отображаться как

ExecutionStatus : Executing & IsCompleted : 0 ожидая, что эти значения будут завершены & 1

Образец запускается в консольном приложении, а код Program.cs приведен ниже, пожалуйста, помогите мне, как правильно настроить его, чтобы обновить статус соответствующим образом.

class Program
    {
        static InstanceStore instanceStore ;
        static void Main(string[] args)
        {

            SetupInstanceStore();
            var inputs = new Dictionary<string, object>() { { "MaxNumber", 100 } };
            AutoResetEvent syncEvent = new AutoResetEvent(false);
            AutoResetEvent idleEvent = new AutoResetEvent(false);            
            WorkflowApplication wfApp = new WorkflowApplication(new StateMachineNumberGuessWorkflow(), inputs);                   
            wfApp.InstanceStore = instanceStore;


            wfApp.PersistableIdle = delegate (WorkflowApplicationIdleEventArgs e)
            {
                return PersistableIdleAction.Persist;
            };
            wfApp.Completed = delegate (WorkflowApplicationCompletedEventArgs e)
            {
                int Turns = Convert.ToInt32(e.Outputs["Turns"]);
                Console.WriteLine(wfApp.Id);
                Console.WriteLine(e.CompletionState);
                Console.WriteLine("Congratulations, you guessed the number in {0} turns.", Turns);
                Console.ReadKey();
                syncEvent.Set();
            };

            wfApp.Aborted = delegate (WorkflowApplicationAbortedEventArgs e)
            {
                Console.WriteLine(e.Reason);
                syncEvent.Set();
            };

            wfApp.OnUnhandledException = delegate (WorkflowApplicationUnhandledExceptionEventArgs e)
            {
                Console.WriteLine(e.UnhandledException.ToString());
                return UnhandledExceptionAction.Terminate;
            };

            wfApp.Idle = delegate (WorkflowApplicationIdleEventArgs e)
            {
                idleEvent.Set();
            };

            wfApp.Run();

            //syncEvent.WaitOne();
            // Loop until the workflow completes.
            WaitHandle[] handles = new WaitHandle[] { syncEvent, idleEvent };
            while (WaitHandle.WaitAny(handles) != 0)
            {
                //Console.WriteLine("in while loop");
                // Gather the user input and resume the bookmark.
                bool validEntry = false;
                while (!validEntry)
                {
                    int Guess;
                    if (!Int32.TryParse(Console.ReadLine(), out Guess))
                    {
                        Console.WriteLine("Please enter an integer ---");
                    }
                    else
                    {
                        validEntry = true;
                        wfApp.ResumeBookmark("EnterGuess", Guess);
                    }
                }
            }
        }
        private static void SetupInstanceStore()
        {
            instanceStore =
               new SqlWorkflowInstanceStore(@"Data Source=localhost;Initial Catalog=WorkFlowInstanceDB;Integrated Security=True;Asynchronous Processing=True");

            InstanceHandle handle = instanceStore.CreateInstanceHandle();

            InstanceView view = instanceStore.Execute(handle, new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30));
            handle.Free();

            instanceStore.DefaultInstanceOwner = view.InstanceOwner;


        }
    }

1 ответ

После отладки в течение некоторого времени я обнаружил, что консольное приложение закрывается до того, как рабочий процесс сохраняется, если я останавливаю консоль для выхода, она сохраняется и из-за поведения библиотеки сохраняемости sqlserver удаляет запись экземпляра при успешном завершении выполнения.

Другие вопросы по тегам