首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF4.0 實戰(十四):ASP.NET 整合 WF4 完整企業級範例——任務佇列系統

     編輯:關於.NET

綜合運用 WF4 持久化、追蹤、自訂擴充、WCF Workflow Service、WorkflowServiceHost、Interop 呼叫 WF3 規則引擎,打造任務佇列系統:提交請求分派至四大隊列 (Product/Service/Marketing/General),支援 FIFO 或清單選取處理、轉派、取消、超時持久化。

功能流程

  • 提交頁:選分類、填內容 → 產生 Guid 追蹤
  • 處理頁:顯示各隊列任務數、QC 標記、處理方式 (FIFO/清單)
  • 處理動作:轉派其他隊列、完成結案、取消退回
  • 無限加簽:任務可層層轉派
登入介面 提交請求頁面 流程啟動顯示 Guid 任務處理頁隊列概覽 Marketing 隊列清單選取 General FIFO 取出最舊任務 任務轉派至 Service 隊列 Service 隊列新增任務

資料庫設計

ER 圖:Queue/SubQueue/QueueInstance/QueueTrack/OperateConfig

五大專案模組

專案結構
  1. RequestWeb:ASP.NET 前端
  2. QCPolicy:WF3 規則流程 (ReviewPolicy 活動判斷 QC)
  3. TestQC:測試專案
  4. UserTasks:自訂 CodeActivity 庫
  5. ServiceLayer:WCF Workflow Service

持久化配置 (web.config)

<sqlWorkflowInstanceStore
  connectionStringName="Request"
  instanceCompletionAction="DeleteAll"
  instanceLockedExceptionAction="NoRetry"
  instanceEncodingOption="GZip"
  hostLockRenewalPeriod="00:00:30" />
<workflowIdle timeToUnload="00:00:10" timeToPersist="00:00:05" />

自訂擴充模式 (三段式:Extension/Behavior/BehaviorExtensionElement)

以 DBConnection 為例,註冊至 WorkflowServiceHost.WorkflowExtensions,流程中透過 context.GetExtension<DBConnection>() 取得連線字串。

追蹤服務實作

繼承 TrackingParticipant,覆寫 Track 解析 CustomTrackingRecord 寫入 QueueTrack 資料表。

主流程 Pick + While 核心邏輯

Submit 建立請求與 QueueInstance While 迴圈支援無限轉派 Complete/Unassign/Timeout 5分鐘持久化

自訂活動範例:CreateRequest

public sealed class CreateRequest : CodeActivity
{
    public InArgument<string> RequestType { get; set; }
    public InArgument<string> UserName { get; set; }
    public InArgument<string> UserEmail { get; set; }
    public InArgument<string> Comment { get; set; }
    public InArgument<Guid> QueueInstanceKey { get; set; }
    public InArgument<Guid> RequestKey { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        var ext = context.GetExtension<DBConnection>();
        if (ext == null) throw new InvalidProgramException("No connection string");
        var dc = new RequestDataContext(ext.ConnectionString);
        var r = new Request { ... };
        var persist = context.GetExtension<PersistRequest>();
        persist.AddRequest(r);
    }
}

本範例改編自 Beginning WF: Windows Workflow in .NET 4.0 最後一章。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved