关于WF的12点总结
开张快一个月了, 对所发的60篇文章总结一下
WF本身并不是一个业务平台,它只是为开发人员提供创建工作流软件的一个平台,也就是说WF不是工作流应用平台,而是一个开发工作流应用的平台。
一、使用WF可以开发具有以下特点的工作流平台
1.业务流程辅助办公软件
2.软体内部工作的顺控制
3.自动筛选查询类系统
4.自动化控制中
二、WF作为net3.0的一部分发布,要运行需要安装net3.0
WF提供了一个在VS2005中可视化设计工作流的设计器,Visual Studio 2005 Extensions for Windows Workflow Foundation,只有安装后才能在VS2005中建立WF项目
三、WF提供了两类工作流模式,流模式(Sequential)与状态机模式(State Machine ),可以简单的将状态机模式看成是有交互点与Goto指令的流模式,设计工作流,其实没有什么应该的模式,用状态机模式作主流程,管理业务状态,流模式作子流程,完成具体的业务操作是一个不错的方案。
四、WF为工作流设计提供了一系列的Activity控件,从型式上分为两类:
简单工能类(System.Workflow.ComponentModel.Activity)
容器类(System.Workflow.ComponentModel.CompositeActivity),
Activity <- CompositeActivity
包括以下具体控件:
CodeActivity:可以添加代码,
IfElseActivity:类似于if语句,
SuspendActivity:类似于线程挂起语句,
DelayActivity:类似于线程休眠语句 ,
CallExternalMethodActivity:类似于调用方法语句,
HandleExternalEventActivity:类似于触发事件语句,
WhileActivity:类似于While语句,
terminateActivity: 类似于终止语句,
ThrowActivity:类似于自定义异常语句,
ConditionedActivityGroup:有点像foreach语句,
replicatorActivity:有点像for语句
PolicyActivity:有点像职责链
可以用InvokeWebServiceActivity调用WebService
可以用WebServiceInputActivity ,WebServiceOutputActivity 将工作流发布成WebService
可以用InvokeWorkflowActivity调用子流程
还有一些用于控制流程、控制状态、事务处理、异常处理的控件
五、工作流以模板方式存在,以实例的方式运行
WF的工作流模板可以是一个编译成DLL的NET类库文件,也可以是一个用XML描绘结点关系的字符串,工作流实例是每个用户依据模板定义的轨道实现具体业务的一组状态数据,实例要在引擎中运行,实例可以保存到数据库或磁盘文件中。
工作流提供了一个运行实例的引擎,引擎不是以一个独立服务的方式发布的,而是可以独立线程的方式寄生在任意程中。被寄生的程序叫宿主,宿主与引擎可以通过接口进行交互,控制引擎以及与引擎中的工作流实例通信。
引擎中可以同时运行多个实例,宿主中可以同时运行多个引擎。
六、WF提供了一系列引擎加载服务,,监听,数据通信ExternalDataExchange
1.持久化服务
WF提供了SqlWorkflowPersistenceService,用于将实例持久化到一数据库中,SqlWorkflowPersistenceService的数据库生成文件在[系统盘\Windows\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\EN]下SqlPersistenceService_Schema.sql与SqlPersistenceService_Logic.sql
也可派生PersistenceService,建立自定义持久化服务
2.监听(跟踪)服务
WF提供了SqlTrackingService,用于监听实例的运行状态,并将状态保存到数据中,SqlTrackingService的数据库生成文件在[系统盘\Windows\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\EN]下Tracking_Schema.sql与Tracking_Logic.sql
使用SqlTrackingQuery,可以从数据库中查询实例的状态
也可派生TrackingService,建立自定义监听服务
对要监听的内容,可以自定义 TrackingProfile,进行筛选
3.数据通信服务
WF提供了ExternalDataExchange,用于实现宿主与实例的通信,CallExternalMethodActivity与HandleExternalEventActivity依赖于该服务
4.还有其他一些服务,如ManualWorkflowSchedulerService,以单程方式运行实例,在实例有与外部设备交互时非常有用.
七、可以自定义流程设计器
WF提供了System.Workflow.ComponentModel.Design.WorkflowView控件,该控件可以用图形的方式显示工作流结构
八、可以用WorkflowChanges在实例运行时使用,动态添加删除结点。
九、可以用WorkflowMarkupSerializer将工作流模板类转换为XML字串格式
十、WF为流程控制类Activity提供了规则对象
十一、WF提供了WorkflowRole对象,可以自定义角色,使用AD角色、使用ASP.NET20角色
十二、关于通信
不经常开发多线程应用,对WF又不熟的朋友,总有一个习惯就是从引擎中得到实例,然后直接操作,这个方式是单线程开发中常用的,不用考虑资源访问冲突,但在WF中实例与宿主、引擎的关系,就像操作多线程资源一样,实例被引擎线程专控,宿主要与实例通信不能直接进行,要通过一个专用通道.
1.可以使用启动参数,动态结点,插入队列的方式实现宿主与引擎中的实例推方式通信,
2.也可以在设计时使用CallExternalMethodActivity,HandleExternalEventActivity,或自定义状态点的方式实现宿主与引擎中的实例拉模式的通信
结语
MS将WF作为Vista的一个基本API发布,而不是一个独立的软件(如BizTalk,Office,CRM,Exchange),其意图不可能是简单染指现有的工作流业务平台这么简单,也许WF的出现如同VB的出现一样,VB是可视化界面设计, WF可能要实现可视化代码设计也说不定。
又一个轮回开始了吗?
是一个全新的面向过程开发的时代到来了吗?
MS下一步想干什么?我不知,DOM好像win98的IE4就有了.现在MS才掀起Atlas热潮
Win95就有媒体播放器、NetMeeting,可MS近两年才开始正式涉足媒体播放,即时通信领域,他还说什么市场分析失误。真是十年藏一剑。
在MS舞出的绚丽剑花里,我们又悟出了他多少剑道呢?
MS真的很了不起,希望对他的技术可以Inherits后再Overrides,而不是简单的New完Invoke一下.