我正在使用一些特殊情况来实施检查点。 我的包包含一个序列容器,它有一个脚本任务和一个foreach循环。每当包在foreach循环中失败时,它都会从foreach循环重新启动,但是我希望在发生故障时从容器的开头执行。
我的容器看起来像这样:
任何想法如何实现这一目标? 编辑: 我尝试将failparentonfailure属性设置为true,但它似乎不起作用。如果任务在foreach循环中失败,则在重新启动时不会运行该脚本。
答案 0 :(得分:2)
通过使用foreach循环(运行单个循环)而不是序列容器来开发变通方法。由于检查点数据不是为循环存储的,因此它会再次运行所有任务。
答案 1 :(得分:1)
对于Sequence Container 1中的所有对象,将FailParentOnFailure属性设置为True。
答案 2 :(得分:0)
按照本教程操作后会遇到相同的问题。在针对我自己的手动示例检查了教程的最终文件之后,我发现Sequence Container 需要将“ TransactionOption”属性设置为“ Required”才能获得预期的结果。
谷歌搜索解决意外行为的方法使我来到了这篇文章,所以尽管它已经有好几年了,但我还是决定发布我的解决方案。
请注意,Microsoft发出以下警告,摘录如下: “ 定义重启点 封装单个任务的任务宿主容器是可以重新启动的最小原子工作单元。 Foreach循环容器和事务处理的容器也被视为原子工作单元。
如果在事务容器运行时停止了程序包,则事务结束,并且容器执行的所有工作都将回滚。重新启动程序包后,将重新运行失败的容器。交易容器的所有子容器的完成不记录在检查点文件中。因此,重新启动软件包时,事务处理的容器及其子容器再次运行。
注意 在同一程序包中使用检查点和事务可能会导致意外结果。例如,当程序包失败并从检查点重新启动时,程序包可能会重复已成功提交的事务。”