你对Windows Workflow Foundation有什么经验?

34

我正在评估WF是否适用于网络业务应用程序,并且很想听听一些关于该技术的最新第一手经验。

我的主要兴趣在于提高项目可维护性,也许是在处理频繁更改的复杂流程时提高开发人员生产率。

我非常喜欢WF的想法,但它似乎相对较为未知,我遇到的许多旧评论都提到一旦开始使用,它就变得极其复杂。

如果它过度设计到无法使用(或是小型到中型项目的不良取舍),那么这是我需要了解的事情。

当然,它自2006年末问世以来已经成熟了,如果是这样,那么另一个非常有帮助的信息是什么!

谢谢您提前的帮助!

12个回答

22

Windows Workflow Foundation是一款功能强大的产品,但仍然处于第一个版本阶段 :-(

使用它的主要原因包括:

  1. 可视化建模业务需求。
  2. 将业务逻辑与业务规则分离,并将规则作为XML文件外部化。
  3. 通过将工作流程作为XML文件外部化,将业务流程与应用程序分离。
  4. 创建长时间运行的进程,并在一定时间内没有发生任何事情时自动响应。例如,发票未付款。
  5. 自动持久化长时间运行的工作流程以降低资源使用率并允许进程和/或机器重新启动。
  6. 自动跟踪工作流程,有助于满足业务需求。

WF作为一个库/框架存在,因此大多数时候需要编写托管WF运行时的主机。话虽如此,使用IIS中托管的WCF是一个可行的解决方案,可以节省很多工作。然而,WCF/WF耦合不够完美,需要进行一些严肃的工作。有关更多详细信息,请参见此处。在下一个版本中可以期望相当多的变化/增强。

WF(和WCF)是微软很多新产品的核心,您可以在PDC期间期待一些有趣的公告。

顺便说一句,保持多个版本的工作流程运行需要一些工作,但这大多数是标准的.NET。我刚刚在这里发表了一系列博客文章,涉及该主题。

关于可视化建模业务需求。

在理论上,这种意图和实现分离的方法非常有效。然而,在实践中,由于纯粹的技术原因,您将会在工作流程中增加许多额外的活动,这样做有点不切实际,因为您必须告诉业务分析师忽略一半的形状和线条。

1
你能否考虑更新这个答案,因为我们现在已经是v4了? :) - Brian MacKay
@Brian:好建议。我有时间的时候会写一篇博客文章。 - Maurice
@Maurice 3年后,有任何更新吗?Windows工作流似乎像是一个鬼城... 从理论上看它似乎不错,但没有人使用它 - 我正在错过一个明显的遗漏。 - David
@David 很遗憾,你不是唯一一个错过它的人。它曾经有很大的前景,但是由于缺乏营销和采用,它几乎被放弃了,就像你所说的一样,成为了一个鬼城。 - Maurice

13

相关问题:何时使用Windows Workflow Foundation?我在那里的回答:

只有满足以下条件之一,您才可能需要WF:

  1. 您有一个长时间运行的过程。
  2. 您有一个经常更改的流程。
  3. 您想要一个过程的可视化模型。

更多细节请参见Paul Andrew的文章:何时使用Windows Workflow Foundation

请不要将WF与任何形式的可视化编程混淆或相关联。这是错误的,可能会导致非常糟糕的架构/设计决策。

因此,如果您有这样的需求,则WF是一个不错的选择。当然,它相对复杂,但要提到它试图解决的问题也很复杂(有时非常复杂)。我认为,例如,脱水/重启动附有事件处理程序的对象(具有可以在对象不在内存中时触发的事件)非常复杂。

我无法判断您所说的“小到中型项目”是什么意思,但总的来说,如果您的项目至少具有上述列表中的两个要求,则可以将WF视为解决方案。


10

我们在一个较大的SharePoint应用程序中使用WF,我可以说它还可以。它具有很强的功能和灵活性。正如Kevin提到的,一旦您理解了工作流背后的基本概念,您就可以几乎做任何您想做的事情。

另一方面,它也存在一些非常严重的问题,比如缺乏版本控制,这可能会在将来严重损害您的应用程序。我们不得不部署同一工作流的多达3个并行版本,名称分别为xxx-v1、xxx-v2和xxx-v3,以保持旧实例运行,并使新实例使用更新的版本。真是一个让人头疼的问题。哦,还有一些非常不直观的概念(关联标记,什么鬼??)


谢谢你的回答!并行版本 - 这与“再水化过程”有关吗?它是如何工作的? - Brian MacKay
现在SharePoint中有强大的工作流版本控制。当然,这已经是两个版本以前的事了,但我想更新一下。 - David
1
这个问题已经在WF 4.5中得到解决(现在可以同时运行多个版本),并添加了一个新的映射功能,允许系统管理员将现有的WF实例迁移到新版本(当然有一些限制需要注意)。 - Tony O'Hagan

9

我们在工作中有一个项目使用了Workflows,我也参与其中。这个项目的想法(来自管理层)是,我们程序员会编写Workflow Activities以及"engine"和框架。然后,非程序员将负责将自己编译的Workflow编译成dlls,引擎会自动加载。

管理层认为非程序员使用Workflow来帮助开发软件的想法很棒,但事实上纯粹浪费时间。我们试图通过这个项目解决的问题相对比较复杂,我们从一开始就知道软件需要不断修改(其计算依赖于其他公司和政府)。

最终结果是,我们无法使Workflow模块变得通用,以便任何人都能使用。所以程序员被迫与Workflows一起工作,而所有的Workflows只是阻碍了我们的工作。


2
完全同意。我们实施了WF,以便用户可以更改业务规则,但由于分离的结果,规则变得非常复杂,甚至程序员也开始感到困难。 - James Westgate

7

我过去几个月一直在使用Workflow 4.0,虽然大多数情况下令人印象深刻,但我发现它非常难学。

对于最新版本(随 .NET 4.0 RC提供),网络上几乎没有任何文档、书籍或培训课程。我只找到了与已废弃的 3.0 版本相关的文章。即使是MSDN文档也十分匮乏。

工作流设计器并不像应该有的那样直观,因此学习非常困难。我不得不依赖StackOverflow上的一个人的答案(顺便说一下,谢谢Maurice!)-如果没有他的帮助,我就毫无头绪了。

因此,总结一下,我认为它有潜力,但你要想学好它还需要等待更多的培训、文档和书籍,否则你将进入盲目状态!


谢谢更新 - 这是我第一次听说工作流4.0。 - Brian MacKay

5
去年我们使用WF完成了一个工作应用程序,现在它被用作一个非常大的系统的支柱,这个系统被一家大银行用于其抵押贷款流程。该流程包括从客户申请到信用批准的多个步骤。
虽然这是一个成功的案例,但在整个过程中遇到了许多问题和危机。对于任何规模较小的项目来说,这些麻烦都不值得。

不确定我是否理解了Orkun的意思 - 所以你在这个项目中使用了敏捷方法,但它没有成功?而且你也不建议在小型项目中使用敏捷方法? - Brian MacKay
不是,Brian,我在说的是WWF。对于误解,我很抱歉。 - Orkun Balkancı

4

我认为MS WF是一个低级别的工作流程库,而不是像K2这样完整的企业工作流产品。它将使您能够构建启用工作流的应用程序,但本身并不是一个工作流应用程序。在这方面,我的经验是积极的,尽管我们不得不在它周围构建很多自己的基础设施(发布/订阅框架、工作流生命周期管理器等)。许多文档都相当简单化,没有涵盖基于MS WF构建企业工作流应用程序的内容。


3

难以学习。非常灵活。不要将其与面向终端用户的可视化工具混淆,它只适用于程序员。我不确定是否喜欢依赖属性的方法。


2

这真的取决于您想用它来做什么。我只用过一点点,但与像MetaStorm(我知道技术上它是BPM,但仍有工作流组件)、Process Choriographer和IBM MQ工作流等更成熟的产品相比,它们根本无法相提并论。它还不够成熟。另一方面,它是免费的,而其他产品则不是,可能可以完成工作。我不知道是否会在它上面投入数百万美元的运营,但对于较小的运营,我会再试一次。您将面临的真正障碍是它需要改变思考方式。如果您没有开发人员之前使用状态系统的经验,那将是一个真正的障碍。


1
Brian,我无法回复你的评论,但是无论如何,通过版本控制,我的意思是在不破坏已运行实例的情况下对工作流的基础代码进行更改,并优雅地应用更新到现有工作流程中。我不确定“股票”工作流程,但至少在SharePoint环境中没有工作流程版本的概念,因此新版本必须部署为完全不同的工作流程,这会成为维护的噩梦。 这与“重新激活”无关,“重新激活”是指在某些事件或状态变化后将“休眠”的工作流程重新激活的过程。这由工作流运行时透明处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接