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

以 Windows Workflow Foundation (WWF) 開發 ASP.NET 應用:MVC 模式與頁面流程控制

     編輯:關於ASP.NET

Windows Workflow Foundation (WWF) 提供流程驅動開發框架,可將商業流程 (如服務台工單、審核簽核) 以視覺化工作流定義,並宿主於 ASP.NET 應用程式中。本文探討 WWF 在 ASP.NET 中的 MVC 架構應用、狀態持久化與頁面導航分離。

WWF 在 ASP.NET 的定位

  • Model:工作流定義 (XOML + Code-beside) 封裝商業邏輯與流程步驟。
  • Controller:ASP.NET 頁面/Handler 負責接收請求、啟動/繼續工作流、決定顯示哪個 View。
  • View:.aspx 頁面僅負責呈現與收集單一步驟的資料,不含流程邏輯。

優勢:邏輯與頁面流程解耦

傳統做法:頁面 A → 按鈕 → Response.Redirect("B.aspx"),流程硬編碼在頁面中。
WWF 做法:工作流活動完成 → 回傳下一步活動類型 → Controller 依據類型決定導向頁面。修改流程順序只需改工作流,頁面代碼完全不動。

關鍵技術點

1. 工作流宿主於 ASP.NET

// Global.asax Application_Start
WorkflowRuntime runtime = new WorkflowRuntime();
runtime.AddService(new SqlWorkflowPersistenceService(connStr));
runtime.StartRuntime();
Application["WorkflowRuntime"] = runtime;

2. 啟動工作流並儲存 InstanceId

// 建立工單頁面
Guid instanceId = Guid.NewGuid();
WorkflowInstance instance = runtime.CreateWorkflow(typeof(HelpDeskWorkflow), null, instanceId);
instance.Start();
// 將 instanceId 存入 Session 或資料庫,關聯使用者
Session["WorkflowInstanceId"] = instanceId;

3. 續做工作流 (使用者提交表單後)

Guid id = (Guid)Session["WorkflowInstanceId"];
WorkflowInstance instance = runtime.GetWorkflow(id);
// 將表單資料封裝為 Dictionary 傳給工作流
instance.EnqueueItem("SubmitQueue", formData, null, null);

4. 持久化與長期等待

  • SqlWorkflowPersistenceService 自動將閒置工作流序列化存入資料庫。
  • 支援數天/數月的等待 (如主管簽核),伺服器重啟不影響。

頁面導航控制範例

// Controller 基類
public class WorkflowController : Page
{
    protected void NavigateToNext(Type nextActivityType)
    {
        string pageUrl = PageMap.GetPageUrl(nextActivityType); // 映射表
        Response.Redirect(pageUrl);
    }
}

適用情境

  • 多步驟表單 (精靈)、審核流程、訂單處理、任何長時間、多人參與的商業流程。
  • 需求頻繁變更流程順序、增減步驟的系統。

注意事項

  • WWF 3.0/3.5 需 .NET 3.0+;.NET 4.0+ 採用 WF4 重寫 API,遷移需評估。
  • 工作流複雜度過高時,偵錯與效能調優較傳統代碼困難。
  • 視覺化設計器需 Visual Studio 2005/2008 搭配 WWF 擴充套件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved