|
WF本身并不是一個業(yè)務(wù)平臺,它只是為開發(fā)人員提供創(chuàng)建工作流軟件的一個平臺,也就是說WF不是工作流應(yīng)用平臺,而是一個開發(fā)工作流應(yīng)用的平臺。
一、使用WF可以開發(fā)具有以下特點的工作流平臺 1.業(yè)務(wù)流程輔助辦公軟件 2.軟體內(nèi)部工作的順控制 3.自動篩選查詢類系統(tǒng) 4.自動化控制中
二、WF作為net3.0的一部分發(fā)布,要運行需要安裝net3.0
WF提供了一個在VS2005中可視化設(shè)計工作流的設(shè)計器,Visual Studio 2005 Extensions for Windows Workflow Foundation,只有安裝后才能在VS2005中建立WF項目
三、WF提供了兩類工作流模式,流模式(Sequential)與狀態(tài)機(jī)模式(State Machine
),可以簡單的將狀態(tài)機(jī)模式看成是有交互點與Goto指令的流模式,設(shè)計工作流,其實沒有什么應(yīng)該的模式,用狀態(tài)機(jī)模式作主流程,管理業(yè)務(wù)狀態(tài),流模式作
子流程,完成具體的業(yè)務(wù)操作是一個不錯的方案。
四、WF為工作流設(shè)計提供了一系列的Activity控件,從型式上分為兩類: 簡單工能類(System.Workflow.ComponentModel.Activity) 容器類(System.Workflow.ComponentModel.CompositeActivity), Activity <- CompositeActivity
包括以下具體控件: CodeActivity:可以添加代碼, IfElseActivity:類似于if語句, SuspendActivity:類似于線程掛起語句, DelayActivity:類似于線程休眠語句 , CallExternalMethodActivity:類似于調(diào)用方法語句, HandleExternalEventActivity:類似于觸發(fā)事件語句, WhileActivity:類似于While語句, terminateActivity: 類似于終止語句, ThrowActivity:類似于自定義異常語句, ConditionedActivityGroup:有點像foreach語句, replicatorActivity:有點像for語句 PolicyActivity:有點像職責(zé)鏈 可以用InvokeWebServiceActivity調(diào)用WebService 可以用WebServiceInputActivity ,WebServiceOutputActivity 將工作流發(fā)布成WebService 可以用InvokeWorkflowActivity調(diào)用子流程 還有一些用于控制流程、控制狀態(tài)、事務(wù)處理、異常處理的控件
五、工作流以模板方式存在,以實例的方式運行 WF的工作流模板可以是一個編譯成DLL的NET類庫文件,也可以是一個用XML描繪結(jié)點關(guān)系的字符串,工作流實例是每個用戶依據(jù)模板定義的軌道實現(xiàn)具體業(yè)務(wù)的一組狀態(tài)數(shù)據(jù),實例要在引擎中運行,實例可以保存到數(shù)據(jù)庫或磁盤文件中。 工作流提供了一個運行實例的引擎,引擎不是以一個獨立服務(wù)的方式發(fā)布的,而是可以獨立線程的方式寄生在任意程中。被寄生的程序叫宿主,宿主與引擎可以通過接口進(jìn)行交互,控制引擎以及與引擎中的工作流實例通信。 引擎中可以同時運行多個實例,宿主中可以同時運行多個引擎。
六、WF提供了一系列引擎加載服務(wù),,監(jiān)聽,數(shù)據(jù)通信ExternalDataExchange 1.持久化服務(wù)
WF提供了SqlWorkflowPersistenceService,用于將實例持久化到一數(shù)據(jù)庫
中,SqlWorkflowPersistenceService的數(shù)據(jù)庫生成文件在[系統(tǒng)盤\Windows\Microsoft.NET
\Framework\v3.0\Windows Workflow
Foundation\SQL\EN]下SqlPersistenceService_Schema.sql與
SqlPersistenceService_Logic.sql
也可派生PersistenceService,建立自定義持久化服務(wù)
2.監(jiān)聽(跟蹤)服務(wù)
WF提供了SqlTrackingService,用于監(jiān)聽實例的運行狀態(tài),并將狀態(tài)保存到數(shù)據(jù)中,SqlTrackingService的數(shù)據(jù)庫生成文
件在[系統(tǒng)盤\Windows\Microsoft.NET\Framework\v3.0\Windows Workflow
Foundation\SQL\EN]下Tracking_Schema.sql與Tracking_Logic.sql 使用SqlTrackingQuery,可以從數(shù)據(jù)庫中查詢實例的狀態(tài) 也可派生TrackingService,建立自定義監(jiān)聽服務(wù)
對要監(jiān)聽的內(nèi)容,可以自定義 TrackingProfile,進(jìn)行篩選
3.數(shù)據(jù)通信服務(wù) WF提供了ExternalDataExchange,用于實現(xiàn)宿主與實例的通信,CallExternalMethodActivity與HandleExternalEventActivity依賴于該服務(wù)
4.還有其他一些服務(wù),如ManualWorkflowSchedulerService,以單程方式運行實例,在實例有與外部設(shè)備交互時非常有用.
七、可以自定義流程設(shè)計器 WF提供了System.Workflow.ComponentModel.Design.WorkflowView控件,該控件可以用圖形的方式顯示工作流結(jié)構(gòu)
八、可以用WorkflowChanges在實例運行時使用,動態(tài)添加刪除結(jié)點。 九、可以用WorkflowMarkupSerializer將工作流模板類轉(zhuǎn)換為XML字串格式
十、WF為流程控制類Activity提供了規(guī)則對象
十一、WF提供了WorkflowRole對象,可以自定義角色,使用AD角色、使用ASP.NET20角色
十二、關(guān)于通信
不經(jīng)常開發(fā)多線程應(yīng)用,對WF又不熟的朋友,總有一個習(xí)慣就是從引擎中得到實例,然后直接操作,這個方式是單線程開發(fā)中常用的,不用考慮資源訪問沖突,但
在WF中實例與宿主、引擎的關(guān)系,就像操作多線程資源一樣,實例被引擎線程???,宿主要與實例通信不能直接進(jìn)行,要通過一個專用通道. 1.可以使用啟動參數(shù),動態(tài)結(jié)點,插入隊列的方式實現(xiàn)宿主與引擎中的實例推方式通信, 2.也可以在設(shè)計時使用CallExternalMethodActivity,HandleExternalEventActivity,或自定義狀態(tài)點的方式實現(xiàn)宿主與引擎中的實例拉模式的通信
結(jié)語
MS將WF作為Vista的一個基本API發(fā)布,而不是一個獨立的軟件(如BizTalk,Office,CRM,Exchange),其意圖不可能是簡
單染指現(xiàn)有的工作流業(yè)務(wù)平臺這么簡單,也許WF的出現(xiàn)如同VB的出現(xiàn)一樣,VB是可視化界面設(shè)計, WF可能要實現(xiàn)可視化代碼設(shè)計也說不定。 又一個輪回開始了嗎? 是一個全新的面向過程開發(fā)的時代到來了嗎? MS下一步想干什么?我不知,DOM好像win98的IE4就有了.現(xiàn)在MS才掀起Atlas熱潮 Win95就有媒體播放器、NetMeeting,可MS近兩年才開始正式涉足媒體播放,即時通信領(lǐng)域,他還說什么市場分析失誤。真是十年藏一劍。 在MS舞出的絢麗劍花里,我們又悟出了他多少劍道呢? MS真的很了不起,希望對他的技術(shù)可以Inherits后再Overrides,而不是簡單的New完Invoke一下.
|