1

我正在运行状态机工作流来控制用户与网站的交互。工作流运行时托管在 asp.net 中。我能够让它按我的意愿工作,但在工作流中为转换状态而触发的事件并不总是转换状态。这让我质疑 WWF 与 asp.net 的集成:

在 asp.net mvc 环境中托管工作流运行时是最佳选择吗?

还是使用 Windows Workflow Service Host 在 Windows 服务中托管运行时并允许 asp.net 应用程序通过 WCF 访问它更好?

有没有人愿意分享的成功案例?

欢迎任何意见和建议,

谢谢,

卡伦

4

1 回答 1

2

如果您对非 Microsoft 解决方案持开放态度,我可以为您提供一个替代方案,尽管它是基于 .Net 的。我使用了一个名为Stateless的框架,它是 Nicholas Blumhardt(Autofac 的创建者)的状态机,您可以在其中执行以下操作:

无状态的设计考虑了在 ORM 域模型中的封装。一些 ORM 对映射数据的存储位置提出了要求。为此,StateMachine 构造函数可以接受将用于读取和写入状态值的函数参数:

var stateMachine = new StateMachine<State, Trigger>(
    () => myState.Value,
    s => myState.Value = s);

只需很少的努力,您就可以保留您的状态,然后稍后轻松地检索该状态。请注意,您无需托管单独的运行时环境。如果您的状态由一个整数表示,您可以获取该值,使用当前状态实例化一个无状态对象,您现在就可以更新您的状态机了。美妙之处在于您不需要 Workflow Foundation 通常所需的开销。

我已经在生产中使用了 4 个月,效果很好。我认为你可以很容易地适应 ASP.Net MVC。


在动态更新工作流方面,如果您配置状态机,例如

var stateMachine = new StateMachine<string, int>();

并在 XML 中维护一个单独的状态和触发器文件,您可以通过遍历字符串 int 值对在运行时执行配置。

于 2010-02-04T10:44:24.090 回答