shivprasad koirala在codeproject上發表了一篇文章windows workflow foundation faq,介紹了wf的基礎知識。這對於理清wf的整個脈絡有一定幫助,摘譯如下。
什麼是windows工作流基礎?
wwf(張逸注:微軟的官方簡稱為wf)是一種程式設計模型,用於在windows中構建支援工作流的應用程式。wf程式集的命名空間為system.workflow。
什麼是工作流?
工作流就是一套活動(activity)。活動作為模型被儲存起來,描述了乙個流程。每個任務就是乙個活動,一組活動則表示乙個完整的工作流。工作流執行時引擎負責執行工作流。
圖1 wf架構
工作流模型可以用純粹的.net**或xaml來編寫,也可以結合二者同時編寫。工作流模型可以被編譯,並執行在windows、asp.net、web service或windows service。
wf中有幾種型別的工作流,區別是什麼?
wf中有兩種基本的工作流型別:順序工作流和狀態機工作流。順序工作流有乙個很清楚的開始與結束邊界。工作流會控制在順序工作流的執行。在順序執行中,任務被依次執行。順序工作流格式更加固定,執行路徑是事先確定好的。狀態機工作流本質上更為動態。工作流具有狀態,而狀態則會等待事件被觸發,然後使其移動到下乙個狀態。狀態機執行路徑是不可預知的。
圖2 順序工作流和狀態機工作流
通過圖2可以看到,順序工作流的執行路徑是確定的。shiv會順序執行整個任務,這些任務都是確定的。而在狀態機工作流中,每個狀態只有在接收到某個外部事件時,才會移到另乙個狀態中。例如,shiv正在**「星際迷航」,此時,一條插播新聞的事件被觸發,使得他又開始**插播新聞。
何時使用順序工作流,何時使用狀態機工作流?
如果工作流是固定的,就選擇順序工作流;如果工作流是動態的,則選擇狀態機工作流。例如,你可以下訂單,訂單只有在管理員審批之後才會通過,這是乙個固定的流程。因為你的訂單必須通過管理員的審批,而其他人則沒有審批的權利。然而,如果你的訂單不停地在發生變化,情形就不相同了。例如,訂單從審批到等待,再到取消,此時最好選擇狀態機工作流。
圖3是乙個執行順序工作流的例子,注意圖中每個步驟的標號:
圖3 順序工作流**示意
1:首先需要選擇system.workflow命名空間;
2、3和4:這三步建立了code物件,並用活動將其連線起來;
5、6和7:啟動乙個工作流,並建立乙個工作流例項物件以執行順序工作流;
8:輸出結果。
第3步新增了活動,使工作流順序執行。新增到活動集合的順序就是活動執行的順序。
注意:圖3的**是通過使用設計器開發的。在實際的專案開發中,常常是使用設計器,而不是手工編寫**。
如何使用設計器建立工作流
使用設計器建立工作流的步驟如圖4所示:
圖4 使用設計器開發順序工作流
在工作流中可以使用conditionedactiongroup定義條件。圖5展示了如何使用conditionedactivitygroup:
圖5 具有條件的工作流
1、在conditionedactivitygroup中定義了兩個條件。
2、選擇其中乙個條件,並在whencondition屬性中定義條件。如果條件為true,則需要在執行**中指定哪個方法會被執行。例如,在圖中我們指定當age>21時,執行old1方法。在第二個條件中,我們指定當age<21時,執行young1方法。圖中未包含第二個條件的設定。
3、工作流編輯器提供了乙個很棒的介面,稱為規則條件編輯器(rule condition editor),可以用於指定條件。age是**中定義的公共屬性。在規則條件編輯器中可以通過智慧型感應獲得age屬性。
4、所有的條件都會在條件活動組內執行。我們還需要指定conditionedactivitygroup何時結束。因此,定義了乙個函式為exit。如果使用者輸入的年齡為-1時,就會結束迴圈,否則就會接收使用者的輸入,並根據條件判斷執行。
在工作流中如何處理異常?
工作流中的異常處理不同於通常的.net應用程式。圖6說明了如何在工作流中處理異常:
圖6 工作流的異常處理
1、在標籤中可以檢視異常。如果單擊檢視異常,就會轉到工作流設計中,如圖中第2部分所示。
2、這是乙個在出現異常時執行的工作流。圖2中的code活動指向了乙個名為raiseexception的方法。在異常情況下,該路徑會被執行。
xoml檔案的使用
根據上面的xoml檔案所示,可以看到其後的**是如何與xoml檔案中的attribute聯絡起來的。code組成了sequentialworkflow標籤中的元素。使用標記語言的乙個好處是我們可以通過修改xoml檔案更改執行順序,而不需要再次編譯整個應用程式。
圖7 xoml
在圖7中,3、4、5與例子無關,但通過它們可以看到實際上使用了textwriter物件對工作流進行了序列化和反序列化。
如何將引數傳遞給工作流?
當你呼叫啟動工作流的方法時,可以使用字典物件傳遞乙個name/value對。如圖8所示:
圖8 將值傳遞給工作流
問答基礎知識
傳統搜尋引擎的缺點 1,相關資訊太多,目前傳統的搜尋引擎返回了太多相關網頁,使用者不容易快速定位到真正想要的資訊上。對傳統搜尋引擎的改進 2,探索將搜尋引擎從字串層面推進到實體層面,幵發出真正理解使用者搜尋意圖,能夠直接回答人們所提問題的系統,這樣的系統稱之為自動問答系統qa question an...
C 基礎知識問答 一
1.靜態變數與非靜態變數的區別 靜態變數在類載入的時候進行初始化和分配記憶體,只有乙個例項。通過類來進行訪問。而非靜態變數是在物件在例項化的時候進行分配記憶體,有多個例項。通過物件來進行訪問。同乙個非靜態變數,多個例項中的值是不同。另外加一句,靜態函式成員不能訪問非靜態成員,如非靜態變數,非靜態函式...
loadrunner 效能測試基礎知識問答
1.什麼是負載測試?什麼是效能測試 負載測試是逐漸增加系統負載,測試系統效能的變化,並最終確定在滿足效能指標的情況下,系統所能承受的最大負載量的測試。例如 訪問乙個頁面的響應時間規定不超過1秒,負載測試就是測試在響應時間為1秒時,系統所能承受的最大併發訪問使用者的數量。效能測試 在一定的約束條件下 ...