Рабочий процесс Windows не прерывается после сбоя транзакции

Я немного новичок в фундаменте Windows Workflow, так что он может быть очень простым, но я застрял с ним. У меня очень простой последовательный рабочий процесс, и есть несколько действий кода, которые находятся внутри действия области транзакции.

Я запускаю свой рабочий процесс из консольного приложения, имеющего следующий код:

        Activity workflow = new Process();
        var inputArgument = new Dictionary<string, object>();
        inputArgument["Argument 1"] = 1234567;
        inputArgument["Argument 2"] = 1234567;
        inputArgument["Argument 3"] = "GUID";
        inputArgument["Aggument 4"] = @"\\filepath\";

        var syncEvent = new AutoResetEvent(false);

        var workflowApp = new WorkflowApplication(workflow, inputArgument);

        workflowApp.OnUnhandledException =
            delegate (WorkflowApplicationUnhandledExceptionEventArgs e)
            {
                return UnhandledExceptionAction.Terminate;
            };

        workflowApp.Completed +=
            delegate (WorkflowApplicationCompletedEventArgs e)
            {
                syncEvent.Set();
            };

        workflowApp.Run();

        syncEvent.WaitOne();

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

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

Я не обрабатываю какие-либо исключения в своем рабочем процессе и хочу, чтобы они были такими, чтобы я мог регистрировать детали исключения.

1 ответ

Решение

Если вы идете в свойствах на TransactionScope в рабочем процессе есть свойство, которое установлено true по умолчанию называется AbortInstanceOnTransactionFailure, Установите это в false, Затем он должен вести себя так, как вы ожидаете.

Когда этот параметр включен, экземпляр рабочего процесса прерывается, но не завершается.