Windows Workflow Foundation 中的多引擎

  以前曾提过双引擎或多引擎的问题,很多朋友问多引擎的目的是什么,在这里,我简单举几个例子

以下例子只是抛砖引玉,千万不要因为下面的几个例子将思路锁死

 

1.为业务扩展灵活性而使用多引擎

 

WF的引擎中可以同时运行多个工作流模板的多个实例,如图



 

这是一种理想的模式,但在实际开发中可能会有如下问题:

1.不同的工作流对持久化服务,监听服务的要求有同

2.不同的工作流对流程的控制要求不同,如CallExternalMethodActivityHandleExternalEventActivity与宿主有比效复杂的交互操作。不同的状态机工作流有各自的业务状态操作

3.系统发布后,需要添加新的工作流模板。

等许多要求如果者使用上图的单引擎模式,代码将十分混乱,也不便于扩充

 这时,可以使用下面的方式(当然这只是一个例子,具体开发中封装粒度可以随意调整)



 

2.为特殊的结点使用专用引擎

为特殊的结点使用独立的引擎的例子很多,在这里我只举一个简单的

在有些开发中,工作流的某个结点可能要与外部调备进行交互,如开关同一台电闸




 

NET中支持多线程,WF也可以并行实例,可以我们的电闸X并不支持多线程操作

 我们不希望A流程实例与B流程实例同时对电闸X下手,我们也不希望AB流程的两个实例同时对电闸X下手,

 这时,可以使用双引擎,第一个引擎正常运行所有实例,当遇到[操作电闸X]结点时,将实例交给一个串行引擎(ManualWorkflowSchedulerService服务),由串行引擎逐个完成每个实例的[操作电闸X]结点,当然还可以在这个串行引擎中进行资源调用优化,优先级设置,开关闸状态共享等管理。要文就不讨论了.

 

3.物理双引擎

目的很明确,负载均衡与故障转移,与写SQL Server的思路一样,这里就不重复了,如图:


 

4.分存式引擎

这个是我以前的一个设想模式,但在其他工作流平台上不容易实现,不过在WF中确是很爽的。

技术特点如下:

1.使用智能客户端模式开发

2.所有的客户端都安装net 3.0 或使用Vista操作系统

3.将业务操作的用户UI直接封装到客户户端程序中

4.多用户参与的工作流,在某个用户的客户端运行完该用户的业务操作后,将实例传行化后以(TCP,WebService,或电子邮件)的方式发给下一个要参与流程的用户.

 以前做过一个类似的,不过客户端的业务逻辑是在代码中推的,严格上说不能算工作流,

 MS要将WF预装在每台电脑上,真不错,可以实现很多以前很难开发的功能了





 

posted @ 2006-10-24 15:34  WXWinter(冬)  阅读(2183)  评论(10编辑  收藏  举报