关于WF的12点总结 -管理资料

管理资料 时间:2019-01-01 我要投稿
【www.unjs.com - 管理资料】

    WF本身并不是一个业务平台,它只是为开发人员提供创建工作流软件的一个平台,也就是说WF不是工作流应用平台,而是一个开发工作流应用的平台,

关于WF的12点总结

    一、使用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的数据库生成文件在[系统盘WindowsMicrosoft.NETFrameworkv3.0Windows Workflow FoundationSQLEN]下SqlPersistenceService_Schema.sql与SqlPersistenceService_Logic.sql

    也可派生PersistenceService,建立自定义持久化服务

    2.监听(跟踪)服务

    WF提供了SqlTrackingService,用于监听实例的运行状态,并将状态保存到数据中,SqlTrackingService的数据库生成文件在[系统盘WindowsMicrosoft.NETFrameworkv3.0Windows Workflow FoundationSQLEN]下Tracking_Schema.sql与Tracking_Logic.sql

    使用SqlTrackingQuery,可以从数据库中查询实例的状态

    也可派生TrackingService,建立自定义监听服务

    对要监听的内容,可以自定义 TrackingProfile,进行筛选

    3.数据通信服务

    WF提供了ExternalDataExchange,用于实现宿主与实例的通信,CallExternalMethodActivity与HandleExternalEventActivity依赖于该服务

    4.还有其他一些服务,如ManualWorkflowSchedulerService,以单程方式运行实例,在实例有与外部设备交互时非常有用.

    七、可以自定义流程设计器

    WF提供了System.Workflow.ComponentModel.Design.WorkflowView控件,该控件可以用图形的方式显示工作流结构

    八、可以用WorkflowChanges在实例运行时使用,动态添加删除结点,

管理资料

关于WF的12点总结》(https://www.unjs.com)。

    九、可以用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一下.

    re: 关于WF的12点总结2006-10-23 08:52ask

    版主,你好,问一个问题,在未持久化到数据库前,在工作流外部怎么获一个工作流实例的运行状态.因为没有更新到数据库,所以不能用SqlTrackingQuery查询得到SqlTrackingWorkflowInstance.Status,困扰许久,请不吝指教!谢谢.

    mailto:the8341.gmail.com  回复  更多评论

# re: 关于WF的12点总结2006-10-23 10:09WXWinter(冬)

    @ask

    你好:

    首先,你要确定你要得到的是工作流运行的什么状态:

    1.物理状态:即每个Activity的状态,如执行,完成等

    2.业务状态:一个或多个Activity组成的一个业务逻辑单元,表示业务进行到一定阶段

    物理状态,对业务流程的关系不大,但在调试时可能需要跟踪,有时某个物理状态点可能会与业务状态点失重合

    还有,持久化与状态监听没有联系,他们是两个独立的服务,你还可以改写Tracking,直接在宿主中得到工作流实例的状态,而不用存到数据库中再用SqlTrackingQuery查询

    如果不用Tracking服务,要想得到实例的状态可以用下面的方法:

    1.使用状态机模式开发,可以直接得到状态结点的状态

    2.使用 CallExternalMethodActivity 控件,将工作流的当前状态抛出给宿主

    3.在工作流的化码内部自已添加状态点,将自定义的状态标记抛出给数据库或其他监听服务,宿主再到数据库或监听服务去读该状态

    不过还是建议用Tracking监听物理状态,用状态机或CallExternalMethodActivity 得到业务状态,我上传的例子中有这方面的演示

最新文章
推荐文章