关于.net 3.5:我应该在WF中使用状态机还是序列工作流?

关于.net 3.5:我应该在WF中使用状态机还是序列工作流?

Should I use a state machine or a sequence workflow in WF?

作为配置管理职责的一部分,我每周执行一次可重复的业务流程。流程不会改变:我将更改细节下载到Excel中,打开电子表格并基于宏复制细节,从议程模板创建Word文档,使用Excel数据更新议程,从Word文档创建PDF,以及给他们发电子邮件。

这个过程很容易在序列工作流中表示,到目前为止,我就是用COM自动化来自动处理Excel和Word片段的。关键在于,在"创建议程"和"发送议程"之间需要人为的步骤,其中,我查看更改细节并提出有关这些问题的问题,这些问题已添加到议程中。我目前有一个Suspend活动,可以在我手动执行此过程时暂停工作流程。

我的问题是,我应该重写工作流程以使其成为状态机,以遵循业务流程中人与人之间交互的最佳实践,还是暂停活动是合理的解决方案?


更新:Panos很好地说明了挂起活动。我同意它在工作流自动机中具有不同的目的。

如果您感到担心的是工作流在各种状态之间的转换,那么状态机工作流就是理想的选择。否则,顺序就好了。

您应该尝试解决的主要问题是,在等待人工交互(线程敏捷性)时,工作流不应占用线程。如果工作流在此期间处于空闲状态并持续存在(例如使用SqlWorkflowPersistenceService),则应该没有问题。


不,我认为您不必为此工作流使用状态机。但是,我建议更改"挂起"活动,因为:

The SuspendActivity activity
temporarily stops the execution of the
current workflow. Typically, you use
the SuspendActivity activity to
reflect an error condition that
requires attention by an
administrator.

When a workflow
instance is suspended, an error is
logged. You can specify a message
string to accompany the error to help
the administrator diagnose the problem
with the SuspendActivity Error
property. A suspended workflow
instance can still receive messages
that are queued up until the workflow
is restarted. All the state
information for the workflow instance
is saved and is reinstated when the
instance is resumed (using Resume).

Source: MSDN

在工作流(序列机或状态机)中添加人工任务的典型方法是定义一个外部数据交换接口并使用HandleExternalEvent活动(可能还包括CallExternalMethod活动)。有关更多详细信息,请参阅以下文章:

  • 使用Windows Workflow Foundation构建状态机
  • Windows Workflow Foundation的简单人工流程

推荐阅读

    linux执行两次命令?

    linux执行两次命令?,系统,信息,连续,名称,命令,初级,首页,工具,管理,终端,lin

    linux命令执行安装?

    linux命令执行安装?,软件,系统,管理,网站,官网,市场,中心,最新,灵活,工作,如

    linux执行一条新命令?

    linux执行一条新命令?,系统,工作,命令,管理,网络,服务,信息,目录,路径,脚本,L

    监控linux执行命令?

    监控linux执行命令?,系统,情况,数据,实时,网络,信息,状态,时间,设备,命令,如

    linux命令卡死不执行?

    linux命令卡死不执行?,系统,设备,数据,密码,工具,情况,软件,环境,分析,命令,l

    linux执行c程序命令?

    linux执行c程序命令?,系统,工作,工具,信息,代码,命令,文件,保险,管理,环境,li

    linux命令执行中断?

    linux命令执行中断?,设备,系统,网络,工具,工作,通用,状态,名字,流程,进程,lin

    执行linux脚本命令行?

    执行linux脚本命令行?,工具,位置,地方,环境,数据,状态,暂停,增长,系统,基础,

    linux远端执行命令?

    linux远端执行命令?,系统,状态,软件,名称,密码,暂停,网络,环境,认证,在线,如

    linux命令行执行成功?

    linux命令行执行成功?,系统,信息,状态,服务,管理,百度,设计,灵活,代码,命令,L

    安卓执行linux命令行?

    安卓执行linux命令行?,系统,设备,基础,发展,标准,情况,信息,电话,号码,工具,

    c执行在linux命令?

    c执行在linux命令?,系统,环境,保险,工具,代码,命令,程序,文件,终端,语言,如何

    linux执行中退出命令?

    linux执行中退出命令?,档案,状态,命令,分析,数据,电脑,实时,系统,工具,编辑,l

    linux授权命令执行?

    linux授权命令执行?,系统,工作,数字,权限,文件,概念,标准,命令,目录,用户,在L

    linux定时执行命令?

    linux定时执行命令?,时间,系统,服务,任务,工作,标准,情况,周期性,工具,命令,l

    如何在linux执行命令?

    如何在linux执行命令?,单位,电脑,命令,系统,基础,发行,工具,工作,信息,文件,m

    linux看命令执行过程?

    linux看命令执行过程?,系统,服务,状态,软件,时间,数据,地址,命令,进程,情况,l

    linux登陆执行命令?

    linux登陆执行命令?,系统,服务,工具,地址,密码,百度,管理,检测,网络,第一,怎

    linux权限命令可执行?

    linux权限命令可执行?,系统,工具,信息,权限,数字,网络,发行,底部,代码,文件,l

    linux远程执行多命令?

    linux远程执行多命令?,工具,服务,命令,状态,暂停,代码,底部,时间,地址,系统,L