一、使用WF可以開發(fā)具有以下特點(diǎn)的工作流平臺
1.業(yè)務(wù)流程輔助辦公軟件
2.軟體內(nèi)部工作的順控制
3.自動篩選查詢類系統(tǒng)
4.自動化控制中
二、WF作為net3.0的一部分發(fā)布,要運(yùn)行需要安裝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ī)模式看成是有交互點(diǎn)與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:有點(diǎn)像foreach語句,
replicatorActivity:有點(diǎn)像for語句
PolicyActivity:有點(diǎn)像職責(zé)鏈
可以用InvokeWebServiceActivity調(diào)用WebService
可以用WebServiceInputActivity ,WebServiceOutputActivity 將工作流發(fā)布成WebService
可以用InvokeWorkflowActivity調(diào)用子流程
還有一些用于控制流程、控制狀態(tài)、事務(wù)處理、異常處理的控件
五、工作流以模板方式存在,以實例的方式運(yùn)行
WF的工作流模板可以是一個編譯成DLL的NET類庫文件,也可以是一個用XML描繪結(jié)點(diǎn)關(guān)系的字符串,工作流實例是每個用戶依據(jù)模板定義的軌道實現(xiàn)具體業(yè)務(wù)的一組狀態(tài)數(shù)據(jù),實例要在引擎中運(yùn)行,實例可以保存到數(shù)據(jù)庫或磁盤文件中。
工作流提供了一個運(yùn)行實例的引擎,引擎不是以一個獨(dú)立服務(wù)的方式發(fā)布的,而是可以獨(dú)立線程的方式寄生在任意程中。被寄生的程序叫宿主,宿主與引擎可以通過接口進(jìn)行交互,控制引擎以及與引擎中的工作流實例通信。
引擎中可以同時運(yùn)行多個實例,宿主中可以同時運(yù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)聽實例的運(yù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,以單程方式運(yùn)行實例,在實例有與外部設(shè)備交互時非常有用.
七、可以自定義流程設(shè)計器
WF提供了System.Workflow.ComponentModel.Design.WorkflowView控件,該控件可以用圖形的方式顯示工作流結(jié)構(gòu)
八、可以用WorkflowChanges在實例運(yùn)行時使用,動態(tài)添加刪除結(jié)點(diǎn)。
九、可以用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é)點(diǎn),插入隊列的方式實現(xiàn)宿主與引擎中的實例推方式通信,
2.也可以在設(shè)計時使用CallExternalMethodActivity,HandleExternalEventActivity,或自定義狀態(tài)點(diǎn)的方式實現(xiàn)宿主與引擎中的實例拉模式的通信
結(jié)語
MS將WF作為Vista的一個基本API發(fā)布,而不是一個獨(dú)立的軟件(如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一下.