我有一个运行时间很长的工作流程,可以在视频处理设备之间移动视频文件,然后将文件状态报告给用于驱动 UI 的数据库
有时,用户按下 UI 上的按钮以将文件“接受”到视频存储服务器中。这涉及将文件从一台服务器复制到另一台服务器。]
他们询问是否可以取消此活动。
我查看了 wf4 文档,但看不到回滚部分工作流程的方法。
这可能吗?我应该使用什么技术。
我有一个运行时间很长的工作流程,可以在视频处理设备之间移动视频文件,然后将文件状态报告给用于驱动 UI 的数据库
有时,用户按下 UI 上的按钮以将文件“接受”到视频存储服务器中。这涉及将文件从一台服务器复制到另一台服务器。]
他们询问是否可以取消此活动。
我查看了 wf4 文档,但看不到回滚部分工作流程的方法。
这可能吗?我应该使用什么技术。
这是恢复工作的两个基本内置活动。
使用 Compensable 活动,您可以将活动添加到补偿处理程序以撤消之前完成的工作。补偿活动可用于触发补偿。如果没有补偿,您将在工作流结束时自动获得确认处理程序,或者在您使用 Conform 活动时获得确认处理程序。
有关更多详细信息,请参阅 Matt Milner 撰写的 A Developer's Introduction to Windows Workflow Foundation (WF) in .NET 4。
不确定我是否完全理解您的情况,但我认为您需要在异步线程上运行传输过程,不时检查“取消”变量以执行回滚。可以在 UI 的主线程上修改此变量。
当然,这将允许您在转移之间取消,而不是在一次转移的中间取消。
好的,首先让我们说“回滚”已经上传的内容的处理必须手动完成,所以无论你在哪里存储这些块,当它们取消时你需要手动清理它们。
现在,就工作流程本身而言,我认为您可以这样设置FlowChart
:
好吧,让我们分解这个工作流程。整个服务应该与某个客户端密钥相关联,这样您就可以为Start
每个客户端启动一次服务,以降低启动成本。
接下来,当所述客户想要开始传输时,您将调用BeginTransfer
它将进入传输循环。传输循环已设置,因此您可以在必要时通过调用在块之间取消CancelTransfer
。
在这个模型中,同一个分支也用于完成传输,因为它脱离了循环,所以当你完成传输块时,只需调用CancelTransfer
(如果你不喜欢这样,只需设置一个看起来完全相同的不同分支)。
最后,当您处于流程循环中时,您可以SoftExit
关闭整个工作流程并将其关闭,以便在需要维护或客户端完成连接时需要调用SoftExit
以处理它时可以轻柔地杀死它。