天天看點

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

有網友問如何在web中使用WF。今天我将實作一個完整的示例。這個示例将包括WF4.0的大部分知識點。包括:

1、持久化服務

2、跟蹤服務

3、自定義擴充

4、WCF Workflow Service

5、WorkflowServiceHost

6、使用Interop活動去調用WF3.0工作流程

效果:

    我先描述一下這個示例的功能,然後示範一下這個示例的功能,然後進一步的說明如何去實作。

    這個示例是一個任務隊列,這個示例在用戶端有兩個aspx頁面。一個是用于使用者輸入請求的頁面,這個請求會根據你選擇的分類将這個任務分入到不同的任務隊列。第二個頁面用于處理這些請求。這些不同分類的隊列有兩種處理方式,沒一個隊列對應一種處理方式,一種是大家熟知的先進先出的方式。每次都是處理最先送出的請求,程式自動遷出最老的任務給你處理,第二種是,你選擇這個任務隊列,程式就會顯示這個隊列所有的任務,然後你選擇一個任務進行處理。

    這個示例中一定有四個任務隊列:Product,Service,Marketing,General。這些任務隊列的處理方式,你可以自己設定。當你送出一個請求之後,程式會根據的你在第一個頁面上選擇的分類将這個請求歸入不同的隊列。在再第二個頁面進行處理。第二個頁面的處理方式有三種:

    第一種:将這個任務指定到另外一個任務隊列中

    第二種:不指定給另外一個處理隊列,直接處理,流程結束

    第三種:取消處理,将從任務隊列中取出的任務歸還回去

    當你采用第一種方式處理的時候。就将這個任務規劃到另外一個隊列當中。此時,你需要在另外的這個隊列中将任務遷出然後進行處理,處理方式也是以上三種。如果你選擇第二種,流程完成。

    這個例子有點類似工作流中的加簽流程。你可以無限的加簽。

    以上是簡單的描述示例的功能,下面我将用截圖的方式展示一下這個示例:

    登入界面:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    點選導覽列上的Submit,在Category下拉框中選擇一項,填寫Comments,點選送出,如下圖:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    流程啟動成功,顯示Guid,如下圖:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    在任務處理頁面上,将多出一筆任務;

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    上面已經有三個任務隊列存在任務了。任務隊列General有2筆任務待處理。QC的意思是是否要進行質檢。這三個隊列中,Marketing隊列處理的方式是列出所有的任務供你選擇,其他兩個隊列的處理方式是先進先出。

    點選Marketing的select,将這個隊列的三個任務出現在下面的清單中,供你選擇其中的一個進行處理:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    而點選General的select,直接将最老的任務遷出:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    我們将General的任務配置設定給隊列Seivice,如下圖:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    你會發現Service多出一任務:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    示範到此結束。下面我将叙述如何去實作以及用到的WF4.0中的所有的知識點。

實作篇:

設計資料庫:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    資料庫操作使用的是Linq,看下上面這張截圖。上面說的4中隊列資料存儲在SubQueue中,Queue是SubQueue的父表。就存了一條資料。QueueInstance是業務邏輯的主表。QueueTrack用于存儲跟蹤資訊,包括:start、Assign、Route、UnAssign。OperateConfig表用于存放WF3.0活動的配置資訊。

你用VS2010打開附件的代碼,你會發現:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

代碼分了五個項目,為了增加代碼的重用性。

1、RequestWeb用于是一個Asp.net應用程式,用于送出任務和處理任務。

2、QCPolicy是一個WF3.0的項目,這裡我講解一下。

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

這個流程用于判斷是否需要進行QC,它将用到下面三張資料表進行判斷:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

WF3.0這個工作流用到了ReviewPolicy活動,如果你對WF3.0也熟悉的話,應該就知道這個用這個活動設定判斷的業務規則。WF4.0現在已經不采用這種方式了,設定如下圖。

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

3、TestQC是一個測試項目,測試QCPolicy。

4、UserTasks定義了一些工作流活動。

5、ServiceLayer是一個webservice項目。

持久化服務

    持久化服務能将運作的工作流程儲存到資料庫中。這個例子的持久化服務是在WorkflowServiceHost中配置的。用了微軟持久化服務,在資料庫中運作SqlWorkflowInstanceStoreSchema.sql和SqlWorkflowInstanceStoreLogic.sql兩個腳本,建立持久化資料表。

web.config配置:

看上面的代碼,connectionStringName="Request"指定持久化的連接配接字元串。

instanceCompletionAction="DeleteAll"指定工作流完成之後删除持久化資料。

自定義擴充。

使用自定義擴充,需要先定義擴充,然後在将這個擴充服務添加到運作時中。這個例子中一共定義了四個自定義擴充。

以最簡單的為例:DBConnection。這個用于在工作流内能取到連接配接字元串。

定義擴充,分三個類:

在web.config中進行配置來添加擴充:

如何使用這個擴充,看下面的例子:

跟蹤服務:

跟蹤服務其實就是一個自定義的擴充,先看定義也分三個類:

web.config中配置:

使用:

看上圖,用了一個Pick 與4個PickBranch,每一個PickBranch裡面是一個或者多個ReceiveAndSendReply。QuseuStats用于傳回每個任務隊列的任務數量。

GetRequest用于傳回任務清單。LoadRequest用于傳回具體的某項任務資料。

主要的邏輯是在Submit中。輕按兩下進入Submit,看Submit的第一部分:

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

上圖這部分用于将用戶端請求的資料儲存到資料庫中,并建立一個Queus執行個體。

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    這是一個while循環。這樣就能無限制的将任務劃分到其他任務隊列下面。

WF4.0實戰(十四):ASP.NET結合WF4.0完整示例

    上圖是第三部分。它也在while循環之中。Complete Request對應asp.net應用程式中的處理請求頁面的Complete按鈕。Unassign Request對應Cancel按鈕。Timeout時間設定為5分鐘,如果5分鐘不處理,就持久化到資料庫中。

    以上的定義的工作流用到了UserTasks和ServiceLayer中的自定義活動,這些自定義活動都是CodeAcitivity類型的。

   以一個自定義活動CreateRequest為例,代碼如下:

總結:這是一個完整的工作流的例子,用到了WF4.0的大部分功能。其他的具體看代碼吧,寫得很累,有任何問題可以給我留言。

本文轉自麒麟部落格園部落格,原文連結:http://www.cnblogs.com/zhuqil/archive/2010/05/08/WFQueueList.html,如需轉載請自行聯系原作者