从另一个工作流程中运行工作流程

问题描述:

我目前在Windows WF中使用顺序工作流程,但需要拆分流程,因为我现在有多个工作流程需要共享一项功能。我相信有一种方法可以在WF中创建自定义代码活动,基本可以实现这一点,但是我的计划是最终让WF支持无状态;因此,我现在不想花时间学习如何编写自定义活动。从另一个工作流程中运行工作流程

我能想到的唯一的事情就是创建一个包含所有“共享”行为的新WF项目,然后从需要它们的工作流程中启动它们。我现在正在研究它,看看它是如何发展的,但是谁能告诉我这是不是一个坏主意?

编辑 - 一个“问题”我现在看到的是,我使用的是单为WF运行时,因为我已经经历过大规模的内存泄漏,甚至当我处置WF RT的正确。我跟踪工作流初始调用者中的所有WF实例,因此为了正确处理事件,我必须将此WF实例列表传递到工作流中,以便它可以添加我在内部启动的WF。对我来说似乎有点混乱,尽管我仍然可以这样尝试。我跟踪WF实例,因为我试图使用它来启用暂停/终止/恢复功能。当用户单击GUI中的相应按钮时,它会遍历所有WF实例并调用匹配方法。

将工作流拆分为不同部分的主要问题是它们完全断开连接。这是主流不等待子工作流程完成的主要工作流程。这可以做,但需要做一些。

另一个想到要记住的是错误处理。当一个子工作流程出错时,主工作流程不知道这一点,与添加子活动的行为完全不同。

如果您需要重用逻辑,您还可以使用设计器创建复合活动。这与开发工作流程非常相似,您可以根据需要在多个工作流程上重复使用这些活动。

+0

谢谢,莫里斯,我会研究你的建议。然而,为了扮演魔鬼的拥护者,为什么主工作流程不会等待子流程完成?我在启动子工作流实例的主WF中有一个代码活动,但我使用AutoResetEvent来创建代码活动块。只有在子工作流完成(并在WorkflowCompleted处理程序中设置事件)之后,主工作流才会继续。我目前正在处理错误处理 - 我应该使用try/catch还是FaultHandlers? – Dave 2010-02-22 17:25:33

+0

我想我需要重新阅读这篇文章:http://msdn.microsoft.com/en-us/magazine/dd419656.aspx – Dave 2010-02-22 17:27:20

+0

Maurice,在成功实现了工作流程中的工作流程方法后,我尝试了您的建议。我非常兴奋地看到创建一个自定义活动非常简单和合乎逻辑,您可以将其放入其他工作流程中。我现在唯一的问题是,将传递到工作流中的参数传入自定义活动的机制是什么?由于该活动在工作流程内部,因此我期望它能以某种方式访问​​工作流参数,但尚未找到答案。 **编辑**好的,我戳了一下,刚才看到他们在设计师的属性窗口! – Dave 2010-02-22 20:52:41