日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Windows工作流基類庫(WF)探密

 wyxhd2008 2013-04-26
雖然我們無法跟蹤微軟的所有新技術(shù),但是Windows工作流基類庫(WF)卻是一項我們無論如何都不能錯過的技術(shù)。本文將闡明WF的優(yōu)勢,并且建立我們的第一個基于WF的應用程序。WF是一套多功能的編程構(gòu)架,這套框架用于建立圖形化的商業(yè)規(guī)則控制流程序。
    WF
是四項技術(shù)之一,其它三項技術(shù)為WPFWCFWindows CardSpace。這些技術(shù)同.NET 3.0框架一起發(fā)布。也許這個”3.0”非常帶有迷惑性,有很多開發(fā)人員認為這些技術(shù)必須運行在新的.NET框架中,事實上,所有的技術(shù)都是運行在.NET2.0中的。這些軟件和框架的層次如圖1所示。



                                             圖1 

    現(xiàn)在面臨的問題是有很多.NET開發(fā)商一直不愿意使用新版本的.NET framework,原因是如果使用這些新的framework,就必須在客戶的機器上安裝它們。但事實上,.NET 3.0技術(shù)只是在.NET 2.0的基礎(chǔ)上加了一些庫而已。我們可以在VS2005中象使用其他的第三方.net庫一樣使用它們。

一、WF的優(yōu)勢
按著長規(guī),一種新的技術(shù)必須為他們的黃金時代做準備,以及在它們被廣泛使用之前提供切實可行的解決方案。這兩點WF都做到了。WF不僅采用了.NET3.0技術(shù),而且是根據(jù)實際需要的功能和設計經(jīng)驗而精心實現(xiàn)的。下面是關(guān)于WF的一些實際的優(yōu)勢:
    1. WF提供了一套高度抽象和可視化的商業(yè)處理模型。這套模型可以非常容易地使用和被理解。無論使用它的是開發(fā)人員或是商業(yè)領(lǐng)域?qū)<摇?/font>
2. WF可以非常容易地改變與之相關(guān)的商業(yè)處理規(guī)則,并且不必重新編譯。
3. WF編程模型可以使開發(fā)人員建立一套可測試的內(nèi)核集合,并且可以在多個程序中使用它們。
    如果和UML的活動圖進行比較的話,WF圖表擁有最好的軟件構(gòu)架,我們并不用擔心這套構(gòu)架過時,或是和商業(yè)處理邏輯有分歧,因為WF就是商業(yè)處理邏輯。
    WF運行時為我們提供了一個強大的,可擴展的開發(fā)執(zhí)行環(huán)境。為了可以長時間處理,當工作流處理空閑狀態(tài)時,可以被保存在一個數(shù)據(jù)庫中。當一個動作發(fā)生時,工作流被激活。
 
 
 
二、面向動作編程(Activity-Oriented Programming,AOP
WF.NET開發(fā)人員引入了一個而向動作編程的概念。這套編程模型可以通過組合動作集合來完成大規(guī)模的商業(yè)處理邏輯。
   
下面我們來看看圖2所示的部分工作流,一個工作流圖包含了如validateProductActivity, sellProductActivity, backOrderProductActivityshipOrderActivity等動作。在工作流中的每一個動作都擁有一個單獨的執(zhí)行單元。


圖2 工作流圖:一個包含了動作的工作流圖,它們中的每一個都執(zhí)行一個商業(yè)處理邏輯。

我們可以使用WF設計器將動作加到一個圖表中,并且指定相應的條件以及基于一定規(guī)則的控制流指定工作流程。這種方法是非常強大的,它將使我們的應用程序非常容易編寫,理解和配置。
 
 
 
三、開始編寫WF程序
為了編寫WF程序,我們需要如下的開發(fā)環(huán)境:
 
1. .NET 2.0 Framework
2. Visual Studio 2005
3. .NET 3.0 Framework
4. Visual Studio 2005 工作流擴展
    在.NET 3.0中的WF框架中定義了超過350個類,這些類分別在如下的三個命名空間中:
 
1. System.Workflow.Activities
2. System.Workflow.ComponentModel
3. System.Workflow.Runtime

當我們在VS2005中安裝WF擴展時,WF擴展將VS2005中加入一個工作流模板工程,我們可以選擇這個模板工程來建立或加一個新的WF項目。
    在安裝完上術(shù)的軟件后,我們就準備建立第一個工作流。下面的部分將描述建立和編寫WF程序的一系列步驟。
四、順序工作流和狀態(tài)機工作流的對比
    我們可以建立兩個類型的工作流:順序工作流和狀態(tài)機工作流。在圖2中顯示的是一個順序工作流,這個圖類似于UML的動作圖。這種工作流將按著預先定義的順序來執(zhí)行。
與之大不相同,狀態(tài)機工作流定義了一個狀態(tài)的集合,在些狀態(tài)之間可以互相轉(zhuǎn)換。工作流的外部事件將處理狀態(tài)之間的轉(zhuǎn)換。為了簡便起見,本文將只關(guān)注順序工作流。
   
最后,我們可以將任何順序工作流描述成一個狀態(tài)機工作流,反之亦然。然后,每一種工作流類型并不是對所有應用程序都適合,如在人機交互的情況下,狀態(tài)機工作流將是最好選擇。
 
 
五、建立一個工作流應用程序
   
在建立一個工作流之前,我們需要建立一個主應用程序,工作流將運行在這個程序中。為了完成這個工作,首先啟動Visual Studio 2005,單擊File菜單,選擇New > Project。在新建工程對話框中選擇相應的工程類型(如圖3的工作流類型)和開發(fā)語言。



 新建工程模板。通過VS2005的工作流擴展建立指定的基于工作流的應用程序庫。


   
在這個模板頁中,選擇序列工作流控制臺應用程序來建立一個基于控制臺的工作流應用。將工程命名為SequentialWorkflowConsole。在工程被建立后,我們將看到一個新的,空的序列工作流程序,如圖4所示。


新的工作流。當我們建立一個新的工作流應用程序時,當將包括一個序列工作流圖。

   
下面到Visual Studio的工具面板,找到Windows工作流頁,這個控件頁中包含了一些預定義的動作圖(如圖5所示)。我們可以將它們拖到剛才建立的工作流圖中。



 圖5 

接下來,將解決方案樹展開,會出現(xiàn)三個System.Workflow引用。這三個庫就是.NET3.0中所帶的Windows工作流組件庫。
為了更好地理解動作工作流應用程序,打開Program.cs文件(C#)或Module.vb文件(Visual Basic)。我們會看到如下的代碼。
代碼1(C#):
static void Main(string[] args) { using(WorkflowRuntime workflowRuntime = new WorkflowRuntime()) AutoResetEvent waitHandle = new AutoResetEvent(false); workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();}; workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e) { Console.WriteLine(e.Exception.Message); waitHandle.Set(); }; WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof( SequentialWorkflowConsole.ProcessOrderWorkflow)); instance.Start(); waitHandle.WaitOne(); Console.WriteLine("Press any key to continue..."); Console.ReadLine(); } }


 

代碼2(Visual Basic):

 

Shared WaitHandle As New AutoResetEvent(False) Shared Sub Main() Using workflowRuntime As New WorkflowRuntime() AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted AddHandler workflowRuntime.WorkflowTerminated, AddressOf OnWorkflowTerminated Dim workflowInstance As WorkflowInstance workflowRuntime.CreateWorkflow(GetType(Workflow1)) workflowInstance.Start() WaitHandle.WaitOne() Console.WriteLine("Press any key to continue...") Console.ReadLine() End Using End Sub

要注意的是這兩個文件的最后兩行會在調(diào)用WaitHandle.WaitOne()之后執(zhí)行。這些代碼行顯示了一個控制臺消息,并且等待控制臺輸入。將這兩行加到我們的控制流應用程序中,并使我們的控制臺工作流程序始終處于運行狀態(tài)(直接輸入一個字符串,并按回車為止)。

 
 
六、編寫代碼動作程序


   
得到一個簡單的工作流,并運行它的最容易的方法就是使用代碼動作。下面將演示如何使用一個單獨的代碼動作來實現(xiàn)一個簡單的工作流,并演示了如何使用工作流設計器和工作流工具箱。
   
下面再在解決方案瀏覽器上,雙擊WorkFlow1圖表來演示設計器。從Visual Studio工具箱中,拖動代碼動作,并將它們放到序列工作流圖上,如圖6所示。我們將看到一個紅色的感嘆號錯誤標記(在代碼動作的右上角)。如果我們單擊這個標記,就會顯示錯誤信息:“Property "ExecuteCode" is not set.意思是說,我們還沒有輸入用于執(zhí)行的代碼動作。這是Windows工作流的一個非常重要的特性,用來提示開發(fā)人員應該按著步驟來輸入相應的代碼,來對動作進行完善(一般是設置一個屬性,或是建立一個事件處理方法)。



圖6 錯誤標記。表示還沒有輸入相應的動作代碼。
 
為了使這個代碼動作完整,并消除這個錯誤,雙擊圖中的動作來建立一個事件處理函數(shù)。然后加入如下的處理代碼。在本例子中,只是簡單地向控制臺寫入一個字符串:
   // C#
private void codeActivity1_ExecuteCode(object sender, EventArgs e) { Console.WriteLine("Hello WF World!"); }


' Visual Basic Private Sub codeActivity1_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs) Console.WriteLine("Hello WF World!") End Sub

現(xiàn)在我們已經(jīng)建立了一個工作流應用程序,并且擁有了一個動作,下面我們準備運行它。

七、運行我們的工作流程序
在運行程序之前,我們可以在main函數(shù)里設置斷點來觀察工作流本身的運行情況以及其他的細節(jié)部分。
在C#中打開Program.cs或在Visual Basic中打開Module.vb,并且在Main()方法中的表達式中設置一個斷點。
    按F5來運行這個工作流程序,然后按F10一步一步地跟蹤Main()方法中的每一行程序。當我們按步驟跟蹤代碼時,要注意這些關(guān)鍵的動作在該方法中的執(zhí)行情況。下面是程序各部分運行的步驟:
1. 首先,WF運行時被實例化。這個會最先發(fā)生,這是因為WF使用運行時來實例化,、執(zhí)行以及管理我們的工作流。
2. 動作的處理方法當工作流的運行時的WorkflowCompleted 和 WorkflowTerminated事件發(fā)生時被注冊。這將允許當一個工作完成或中途退出時通知工作流應用程序。
3. 工作流被實例化。要注意的是應用程序并沒有直接實例化工作流,而是通過調(diào)用工作流運行時的CreateWorkflow()方法來實例化工作流的。

4. 最后,這個方法調(diào)用了工作流的Start()方法,這個方法開始執(zhí)行工作流的動作代碼。
    當工作流完成時,我們將會看到如圖7所示的一個控制臺窗口,在其中顯示“Hello WF World!”。按任意鍵后,這個控制臺窗口將關(guān)閉,然后按F5將退出這個工作流應用程序。

工作流應用程序執(zhí)行后的界面。在這個界面中顯示了動作代碼執(zhí)行后的輸出信息“Hello WF World

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多