使用Microsoft WF序列化版本化的工作流

时间:2020-03-06 14:32:17  来源:igfitidea点击:

我有一个满足以下条件的简单业务流程

  • 用户需要使用Desinger更改工作流程本身
  • 该工作流程是长期的冲洗工作流程,因此将被序列化

有没有一种方法可以自动执行对不同工作流程序集进行版本控制的任务?

解决方案

不同工作流程序集的版本控制不是一件容易的事,并且有很多复杂性。在这里,我们可以找到一系列与此相关的文章。

我们可以将WF设计器重新托管在我们自己的应用程序中,以允许最终用户更改工作流。当我们托管设计师时,我们几乎可以控制他们的工作。例如,我们可以阻止他们删除或者禁用活动,而仅允许他们在工作流程的预定义区域中添加特定的新活动。最好的方法是将这些工作流程另存为XOML文件,并以此方式启动它们。这确实意味着我们不能将代码添加到工作流本身,但是可以自由定义派生自SequentialWorkflowActivity(或者等效状态)的工作流基类,并将其用作工作流基类。这使我们可以添加代码和属性。例如,我们仍然可以添加CodeActivity,但是我们需要链接到基类中的代码。

工作流序列化或者所谓的脱水与运行中的工作流一起使用,以将其持久化到磁盘上。它使用标准的.NET二进制序列化,由于工作流的长期运行特性,可能会有些棘手。但是,一旦我们知道要寻找什么,就没什么大不了的了。有关一系列博客文章的开头,请参见http://msmvps.com/blogs/theproblemsolver/archive/2008/09/10/versioning-long-running-workfows.aspx。

不确定是否需要它,但是还可以更改已经执行的工作流程。这将使用WorkflowChanges对象。有关更多详细信息,请参见http://wiki.windowsworkflowfoundation.eu/default.aspx/WF/RuntimeModificationOfWorkflows.html。

这是有关工作流版本控制的另一篇文章:

http://www.adefwebserver.com/DotNetNukeHELP/Workflow/VacationRequest3.htm

基本上,我们可以在以下情况下对使用程序集的工作流进行版本控制:

  • 与工作流一起使用的任何程序集都必须使用强名称。
  • 如果程序集使用接口,则还必须使用强名称,并将其放置在单独的程序集中。
  • web.config中的条目可以指示asp.net在哪里找到正确的程序集。