




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
19WFWFWindowsWorkflowFoundation,是微軟在.NET3.0之后推出的一套工作流開發框架。WF是微軟在.NET3.0上推出的三大框架(WPFWCFWF)之一,其主WF持流程的基礎結構。WF的出現為開發提供了開發這類流程應用程序的基礎。WF被用于簡化和增強.NET應用程序的開發。如果應用程序需要涉及到工作流,則開發的框架。WFWindowsForms應用程序、ASP.NET應用程序或WebService中。斷地判斷用戶的回答。程序流程如圖19.1所示。staticstaticvoidMain(string[]{ boolisRight=true;while{ ifanswer禍從口出 isRight=false;} }}本示例使用WF設計工具實現的流程設計。圖19.1回答謎底流程 圖19.2WF設計視圖中使用WF提供的while活動創建了一個循環,然后使用code活動在循環中執行一段代碼。開發使用VisualStudio設計工具設計好應用程序要實現的程序邏輯后,再只需要在codeActivity1中編寫執行代碼即可。本示例codeActivity1的ExecuteCode事件代碼示例代碼19-publicpartialclassWorkflow1:SequentialWorkflowActivity{publicpartialclassWorkflow1:SequentialWorkflowActivity{privateboolisRight;publicboolIsRight{get{returnisRight;}set{isRight=value;}//響應CodeActivity的ExcuteCodeprivatevoid{stringanswerConsole.ReadLine();if(answer=="禍從口出"){der,EventArgs isRight=} }}Activity,表示一個順序工作流。Program.cs依然存在,但現在主要用于開啟工作流運行時staticstaticvoidMain(string[]{ using(WorkflowRuntimeworkflowRuntime=new{AutoResetEventwaitHandle=newpletedWorkflowTerminated事pleted+=pletedEventArgse){waitHandle.Set();};workflowRuntime.WorkflowTerminated+=delegate(objectsender,WorkflowTerminatedEventArgse){ WorkflowInstanceinstance=workflowRuntime.CreateWorkflow}}涉及到復雜工作流程處理時,WF則能救開發于水火之中。下面是幾個WF的基本和WF的運行時引擎,讓開發能夠以一種統一的方式開發應用程序。WFWF。比如,可以提供自定義的持久化服務來取代WF提供的SQL持久化服務。WF的開發環WF最先是作為.NET3.0VisualStudio2005WF擴展來開發WF應用程序。在VS2008中已經內置了WF的開發支持,不需要安裝任何其他插件。VS2008VS2005,則還需要安.NET3.0WFforVisualStudioExtension這幾個安裝程序都可以從微軟上進行安裝。安裝完成之后,在VS2005的項WorkflowWF的開發項目模19.3Workflow項目模第一個工作流示例程VS2008中創建一個工作流的示例程序,并介紹一些與設計器有VS2008中創建一個WF應用程序。創建步驟如下所示。打開VS008,選擇“新建”︱“項目”命令,將彈出如圖19.3所示的框。在該框中選擇項目類型為Workflow,模板為“順序工作流控制臺應用程序”,命名為ApprovalOrder。單擊“確定”按鈕,VS2008將創建2個文件。Program.cs:這是一個典型的控制臺應用程序的源文件,VS2008為該文件添加了在文件夾中,VS2008自動添加了WF所需要名空間的,如下所示。System.Workflow.Activities:WF的活動所在名空間,該命名空間定義了可以 System.Workflow.Runtime:包含WF運行時WorkflowRuntime類和Workflow-Instance類,主要用于控制工作流運行時引擎和工作流實例執行的一些類。System.WorkflowServices:這是.NET3.5新增的一個命名空間,主要提供了工作流VS2008Workflow1.csWorkflow1.designer.cs文件。該文件是一個設計時支持的文件。當開發持從工具箱中以拖動的方式來設計工作流,如圖19.4所示。訂單的批核涉及到一個批核與的分支,因IsElseActivity
19.4WF的設計所有的活動都直接或間接派生自S ponentModel.Activity類。VS2008根據工作流的類型在工具箱中顯示相應的活動。順序工作流是一種流水線的執行方式。綠色向下箭頭表示工作流執行開始,經過一系列開發定義的活動之后,紅19.5所示。示例將使用IfElse活動組件來判斷是否批核訂單。事實上,開發也可以在IfElse的分支ifElseBranchActivity1或者ifElseBranchActivity1添加的IfElse活動ifElseBranchActivity1所需要完成的任務,如圖19.6所示。圖19.5IfElse活動設計視 圖19.6設計器的任務提示功ifElseBranchActivity1YesIfElseBranch,表示當條件成立時的流程。將ifElseBranchActivity2NoIfElseBranch,表示當條件不成立時要執行的流程。單擊紅Condition”,VS2008自動將焦點跳轉到屬性設置窗口。在屬性窗口中,單擊Condition右側的下拉箭頭,可以選擇兩種條件。性規則條件:使用規則定義條件。可以利用VS2008的規則設計器來定義符號,可以單擊該符號展開代碼條件屬性。代碼條件需要開發指定一個代碼名稱,在屬性來決定是執行第一個分支還是執行第二個分支。簡單地將該參數設為True,代碼如privateprivatevoid{e.Result=}der,ConditionalEventArgs為分支添加代碼,需要使用到CodeAcitivity,即代碼活動。代碼活動允許開發人分別命名為ApprovalOrder和RejectOrder,如圖19.7所示。19.7CodeActivity到分支OrderActivity需要指定ExecuteCode屬性來定義要執行的方法名稱。為這兩個CodeActivityApprovalOrderCodeRejectOrderCode,分別添加一些執行代碼,//NoIfBranch//NoIfBranch中的代碼活privatevoid{ ine("訂單被批核了}//YesIfBranch中的代碼privatevoid{ ine("訂單被取消了}der,EventArgsder,EventArgs稍縱即逝,在Program.cs的最底端添加一行代碼。WF應用程序工作了。如果能夠提示用戶進行批核,根據用戶輸入的Y或者N的值來決定分支執行,應該Workflow1.csApproved,代碼如privateprivatebool_approved=false;publicboolApproved{get{return_approved;}set{_approved=value;}}privateprivatevoid{e.Result=}der,ConditionalEventArgs接下來需要在Program.cs中添加一個控制臺信息,提示用戶批核或訂單。如果輸入Y表示批核,輸入N或其他字符表示用戶。當收到用戶在控制臺的輸入后,需要ApprovedProgram.csMain()方示例代碼19-staticstaticvoidMain(string[]{ stringstr=Console.ReadLine();using(WorkflowRuntimeworkflowRuntime=new{AutoResetEventwaitHandle=newpleted+=delegate(objecpletedEventArgse){waitHandle.Set();};workflowRuntime.WorkflowTerminated+=delegate(objec WorkflowTerminatedEventArgse){ 型的keyDictionary<string,object>wfArgument=newDictionary<string,boolapprovedargstrY"truefalsewfArgument.Add("Approved",WorkflowInstanceinstanceworkflowRuntime.CreateWorkflow(typeof}}現在可以運行該示例程序,啟動時,控制臺窗口將顯示一條消息要求用戶輸入Y或N來批核或訂單。輸入不同的值會有不同的提示信息顯示在控制臺窗口中,如圖19.819.8第一個工作流示例運行效WF架構簡WF只是一個框架,需要宿主到其他的應用程序中才能運行。在本書第一個示例的Program.csMain()WorkflowRuntime,并關聯相關的事件,然后調用CreateWorkflow()方法創建一個工作流實例。并調用工作流實Start()方法開始工作流的執行。從整體上看WF應用程序運行時,最先需要啟動WF的運行,也就是Workflow-Runtime。WorkflowRuntime開啟一個獨立的工作流任務,可以為該類關聯一些事件來監視工作流運行時的運行。WorkflowRuntime能和使用可插接的服務來關聯當前的執行是一個單獨的可執行的工作流實例。WorkflowInstance擔當著實際工作流的類,用戶可以通過該類來獲知當前工作流的執行情況。WF的整體架構如圖19.9所示。WF的運行時引擎支持可擴展服務,服務是一些類的實例。在應用程序啟動時,可以WF的運行時引擎中。每種服務都完成其特定的功能。WF舉個例子,持久化服務在一些需要長期運行的工作流中屬于較重要的一個服務。WFSqlWorkflowPersistenceServicesSQLServer數據庫來處理持久化。當數據庫中獲取信息再次運行。如果需要這項服務,通常需要向工作流引擎。本地服務則由開發定義并實現,開發可以使用與服務相同的方式向運行時服務,19.9WF架構的實例,開啟工作流引擎。下面的應用程序可以作為WF應用程序的宿主。WindowsFormsWindowsPresentationFoundation.NET3.5WFWCF服務對外公開,讓這些服務能被宿主到自己的應用程序、IIS或者是WAS中。注意:在一個應用程序域中可以有多個工作流運行時引擎,并且運行時引擎的每個實例宿主應用程序將負責創建WF運行時引擎,WF服務,處理WorkflowRuntime事件。當宿主程序初始化了WorkflowRuntime類的實例后,將會創建并開啟獨立的WorkflowInstanceWorkflowRuntime事件來監視每個工作理解WorkflowRuntime工作流引WorkflowRuntime類位于System.Workflow.Runtime命名空間。默認情況下,WorkflowRuntime將以異步的形式執行工作流。也就是說,WFProgram.csusing語句塊創建了WorklfowRuntime類的實例,然后創建了AutoResetEvent對象。AutoResetEvent允許線程通過發信號互相通信。實例化該類后,在 和WorkflowTerminated的事件委托中分別調用了Set()方法來釋放線程。不難想象,當工作調用WaitOne()方法來等待宿主程序發送調用指令。WorkflowRuntimeWF的運行時環境。開發也可以響應WorkflowRuntime的各種事件來工作流引擎的運行。主顯示的調用StartRuntime()方法前,該屬性一直為False。當調用該方法后,該屬性為True,直到調用StopRuntime()方法為止。AddService()CreateWorkflow()GetService():使用指定的TypeGetWorkflow()GuidreaWorfo()Worfownsace對象實例。eadeWrkfw()方法返回當前工作流引擎中所加載的所有工作流實例。該方法返回一個ReadOnlyCollecton<WorkflowInsance>ReadOnlyCollection<WorkflowInstance>ReadOnlyCollection<WorkflowInstance>workflow=workflowRuntime.AddService()、GetAllServices()GetService()方法用于添加和獲取工作流引擎中的服StartRuntime() StopRuntime()可供宿主應用程序啟動和停止工作流引擎WorkflowRuntime同時提供了很多事件,開發可以訂閱這些事件來監視工作流引ServicesExceptionNotHandled:在派生自WorkflowRuntimeServiceWorkflowAbortedpletedWorkflowCreatedWorkflowIdledWorkflowLoadedWorkflowPersistedWorkflowResumedWorkflowStartedWorkflowSuspendedWorkflowTerminated示例代碼19-classclass{staticvoidMain(string[]{using(WorkflowRuntimeworkflowRuntime=new{AutoResetEventwaitHandle=new//調用AddServiceworkflowRuntime.WorkflowCreated+=OnWorkflowCreated;workflowRuntime.WorkflowIdled+=OnWorkflowIdle;workflowRuntime.WorkflowUnloaded+=OnWorkflowUnload;workflowRuntime.WorkflowLoaded+=OnWorkflowLoad;workflowRuntime.ServicesExceptionNotHandled+=pletedWorkflowInstanceinstance=workflowRuntime.}}staticvoidOnExceptionNotHandled(objec ServicesExceptionNotHandledEventArgse){ ine類型 ine消息}staticvoid{ ine("工作流被創建}staticvoid{der,WorkflowEventArgsder,WorkflowEventArgs ine("工作流空閑中}staticvoid der,WorkflowEventArgs{ ine("工作流已卸載}staticvoid der,WorkflowEventArgs{ ine("工作流已加載}staticvoidOnWorkflowTerminated(objec WorkflowTerminatedEventArgse){ }staticpletedEventArgse){ }}理解WorkflowInstance工作流實WorkflowInstance代表一個工作流實例。當工作流運行時引擎初始化后,通過兩個步個實例,然后調用其Start()方法來開始執行工作流。注意:WorkflowInstance對象實例實際上只是實際工作流的一個對象。無論項目中在WorkflowInstance類中適當方法來執行操作。TypeTypetype=CreateWorkflow()具有6種重載的方法,一些重載可以用來為工作流實例傳遞參數。鍵使用string類型,表示工作流的根活動所的公有屬性的名稱,通常是在工作流實例ObjectDictionary時,必Dictionary<string,object>wfArgument=newDictionary<string,boolapprovedarg=str=="Y"?true:false;wfArgument.Add("Approved",approvedarg);WorkflowInstanceinstance=workflowRuntime.CreateWorkflowWorkflowRuntime:獲取此工作流實例 WorkflowRuntimeGuid標識符,InstanceId屬性將返回此標識值。之所以具Abort()ReloadTrackingProfiles():重新加載此工作流實例的配置文件GetWorkflowDefinition()方法將返回工作流實例中的根活動的,比如順序工作流實例總是派生自SequentialWorkflowActivity。而該類又派生自19.10所示。 的調用代碼如下所示 圖19.10工作流活動層次結////獲取workflow根活動Activityroot= 枚舉類型的屬性,具有如下所示的可選值WF提供了兩種工作流類型:順序工作流和狀態機工作流。本章前面的示例都是以順建WF工作流實例時,也可以選擇一種開發模式。本節將詳細介紹WF的幾種工作流類型WF工作流的類順序工作流定義了一系列按照指定步驟執行的步驟。在工作流,可以使用熟悉的19.11是一個訂單批核的工作流程。訂單從開始到結束,圖19.12將圖19.11中的順序工作流轉換為狀態機工作流。一個簡單的狀態機工作流示VS2008,選擇“文件”︱“新建”|Workflow項目類型,選擇狀態機工作流控制臺應用程序。命名為SimpleStateMachine,如圖19.13所示。最StateActivity,用作初始狀態。可以看到工具箱中添加了一些與狀態機相關的活動。該屬性用作初始狀態。在創建狀態機工作流時,必須為此屬性指定一個狀態活動。將VS2008StateActivity更改為StartState,然后在屬性窗口指定StateMachineWorkflowActivityInitialStateNameStartState,如圖19.14所示。圖19.11訂單批核順序工作 圖19.12訂單批核狀態機工作圖19.13創建狀態機工作流控制臺應用程 圖19.14為工作流指定起始狀StateActivity是狀態機工作流的主要活動。當在狀態機工作流中的不同位置捕獲了事件時,會進入不同的狀態。將新的StateActivity活動工作流時,可以添加EventDrivenActivity活動、StateInitializationActivity活動、StateFinalizationActivity活動或其他StateActivity實例作為子級。StateActivity活動依賴于外部事件發生時,使用EventDrivenActivity活動,然后才能執行前一個活動的子活動。最后可以通過SetStateActivity在其他狀態活動之間切換。5CodeActivity,將用于執行一段代碼。代碼設計后如圖19.15所示。ExecuteCode屬性的執行代碼如下所示。privateprivatevoid{der,EventArgs ine("在開始狀態.轉換到工作流狀態}單擊EventDrivenActivity窗口左上角的Workflow1圖標回到主視圖,添加一個StateActivityState1。添加與圖19.15相同的的活動,并回到StartState的E
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木工藝品的創新設計理念考核試卷
- 租賃業務的服務質量評價與改進考核試卷
- 森林公園生態旅游市場分析與預測考核試卷
- 涂料在醫療器械涂裝的應用與要求考核試卷
- 魯濱遜漂流記讀后感初二語文作文
- 塑料鞋消費趨勢與流行元素考核試卷
- 滑動軸承的疲勞裂紋擴展研究考核試卷
- 建筑消防工程安全評估考核試卷
- 水果種植園農業產業鏈優化考核試卷
- 無線家庭視聽解決方案考核試卷
- 《立體裁剪電子教案》課件
- 2024-2030年中國高等教育行業發展策略及投資改革創新模式分析報告
- 生產安全事故報告及處置制度模版(3篇)
- 《教育系統重大事故隱患判定指南》知識培訓
- 牡蠣養殖及深加工項目可行性研究報告
- 2014-2024年高考語文真題匯編之詩歌鑒賞含答案解析
- 49-提高臨邊防護欄桿有效合格率(清泉建筑)
- 防腐木平臺施工方案
- 金融科技金融大數據風控平臺開發與應用方案
- 藥品經營質量管理規范
- 專項24-正多邊形與圓-重難點題型
評論
0/150
提交評論