我们希望用 WF4 工作流替换我们的大部分业务逻辑。
它们都是非常典型的工作流程:用户操作创建实例、数据库工作、下一个用户确认等。
我们对工作流主机的要求是:
- 从存储在数据库中的 XAML 定义创建工作流 (DynamicActivity)
- 支持不同版本的工作流
- 支持基于长时间的事件(我们目前知道 5 天后通知并在 30 天后回滚工作流)
- 支持许多工作流的许多实例(我们已经确定了 10 个工作流,其中大约有 4000 个正在进行中,其中只有少数在任何时候都在处理)
- 服务重启后保留所有状态(包括基于时间的事件)
- 对调用用户进行身份验证(WindowsAuthentication,如果可能)
作为迁移工作的一部分,我使用“WCF 工作流服务应用程序”项目构建了一些 POC,但据我所知,这些并不是立即可行的。
我知道 #2 是通过 WCF 路由完成的,我的理解是 WSH 将为我们处理 #3(这是真的,给定 #5 吗?),但我看不出 #1 在默认情况下如何工作项目结构。
我已经使用 WorkflowApplication 实例解决了 #1,但这依赖于使用书签来恢复每个输入事件,而且我不相信 WorkflowApplication 会在不卸载空闲工作流的情况下扩展以满足我们的需求,这会破坏延迟活动。
所以,如果你一直坚持我这么远:
- 有没有办法使用 WSH 来实现所有这些,无论是在默认项目中还是通过我们自己实现其中一些?
- 考虑到较长的持续时间以及卸载和重新加载工作流的潜在需求,我们是否最好编写自己的“DurableDelay”活动来记录真正的唤醒时间并卸载要由主机进程恢复的工作流?
- 如果 WSH 不打算这样做,是否有现有的替代方案?
我不反对编写我们自己的主机服务来处理工作流生命周期,我们甚至制定了提议的设计,但如果事实证明有现成的解决方案,我不想开始这条路线.
干杯