事务失败后Windows工作流不会终止

时间:2016-02-17 19:52:59

标签: workflow workflow-foundation-4 workflow-foundation transactionscope sequential-workflow

我对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();

如果我不添加事务范围活动,我的工作流运行正常,如果发生异常,工作流实例将终止,我的控制台应用程序也会关闭。

但是,当我添加Transaction Scope活动时,如果任务活动在Transaction Scope中失败,那么我的工作流实例将继续运行以及我的控制台。任何人都可以指导我如何终止实例吗?

我没有在我的工作流程中处理任何异常,并且希望它像那样,以便我可以记录异常细节。

1 个答案:

答案 0 :(得分:2)

如果您转到工作流程中TransactionScope的属性,则默认情况下会将某个属性设置为true,名为AbortInstanceOnTransactionFailure。将其设置为false。然后应该按照您的预期行事。

启用此选项后,将导致工作流实例中止但不终止。