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

WCF 工作流服務:使用 WF4 與 WCF 4 宣告式建構長期執行、持久化、可追蹤的抵押審批流程

     編輯:關於.NET

.NET Framework 4 將 Windows Workflow Foundation (WF4) 與 Windows Communication Foundation (WCF) 深度整合,開發者可透過**完全宣告式**設計 (零程式碼) 建構企業級長期執行服務。本文以房地產公司 Contoso 的抵押審批流程為例,展示 Flowchart 建模、自訂活動組合、關聯、持久化、ETW 追蹤、服務參考產生 Proxy 活動等核心功能。

應用情境:抵押審批流程

  • 客戶提交申請 (ID、房價、頭期款、期限、薪資、信用狀況)。
  • 篩選規則:止贖/破產/訴訟中 → 拒絕;無信用紀錄且頭期款<20% → 退回補件;其他 → 通過。
  • 依優先序詢問 3 家抵押供應商 (標準服務合約),任一接受即完成。
  • 審批結束後記錄 CRM,回覆客戶結果。
  • 流程可能跨天/週執行,需持久化與狀態查詢。

抵押審批流程業務流程圖

建立 WCF 工作流服務專案

  • 範本:WCF Workflow Service Application → 產生 .xamlx 服務定義檔。
  • 設計介面:WF 設計器拖放活動,服務合約由 Receive/SendReply 推導產生。
  • 設定檔 web.config 極度精簡,得益於 WCF 4 簡化設定。

Flowchart:天然契合業務流程的控制流

順序工作流難以表達「退回補件後重新提交」的回溯邏輯。Flowchart (WF4 新增) 以節點與箭頭直觀描述:

  • 起始節點 → Receive (CanCreateInstance=true) 接收申請。
  • 子 Flowchart「篩選邏輯」封裝複雜判斷,回傳 Approved/Rejected/Incorrect。
  • FlowSwitch 依篩選結果分流:Rejected 直接回覆、Incorrect 關聯回溯 Receive、Approved 進入供應商詢價。

Flowchart 完整流程圖

Receive 參數綁定視窗

關聯:讓多訊息找到同一工作流實例

客戶補件時需路由至原實例。使用內容式關聯:

  1. 宣告 CorrelationHandle 變數 (customerCorrelationHandle)。
  2. 初始 Receive 設定 CorrelationInitializers 從 customerCode 參數初始化。
  3. 後續 Receive (補件、狀態查詢) 設定 CorrelatesWith=handle、CorrelatesOn=customerCode XPath 查詢。
  4. WF 設計器自動產生 XPath,無需手寫。

自訂活動:封裝供應商詢價邏輯 (AskVendor)

三家供應商邏輯相同,僅端點 URI 不同。建立宣告式自訂活動 (Activity 專案範本):

  • 輸入:客戶抵押資訊、服務 URI;輸出:利率、結果訊息。
  • 根活動 Parallel:左分支 Send 詢價 → ReceiveReply 等待回應 → 設定完成旗標;右分支 While 迴圈監聽客戶狀態查詢 (Receive/SendReply),完成旗標為真則退出。
  • 所有訊息活動共用 customerCode 關聯。
  • 建置後自動出現在工具箱,主 Flowchart 拖放三次並設定不同 URI 即可。

AskVendor 自訂活動 Parallel 結構

服務參考產生 Proxy 活動:呼叫 CRM 服務

專案右鍵 Add Service Reference 指向 CRM 服務 → 自動產生每個操作對應的活動 (如 LogInteraction),拖放即用,免去手寫 Channel Factory 代碼。

工具箱中自動產生的 CRM Proxy 活動

持久化:SQL Instance Store 讓閒置實例落地

web.config 宣告式設定:

<sqlWorkflowInstanceStore connectionString="Data Source=.\SQLExpress;Initial Catalog=InstanceStore;Integrated Security=True" />
<workflowIdle timeToUnload="0" /> <!-- 閒置立即卸載持久化 -->
  • 實例進入閒置 (等待回應) 即序列化至資料庫,釋放記憶體。
  • 支援 Web Farm:不同節點可載入同一實例繼續執行。
  • 關聯資訊隨實例持久化,訊息到達時 WorkflowServiceHost 自動載入正確實例。

ETW 追蹤:生產環境可視化監控

web.config 啟用 EtwTrackingParticipant 並指定 HealthMonitoring 追蹤設定檔:

<etwTracking profileName="HealthMonitoring" />
<tracking>
  <trackingProfile name="HealthMonitoring">
    <workflow activityDefinitionId="*">
      <workflowInstanceQueries>
        <workflowInstanceQuery>
          <states><state name="Started"/><state name="Completed"/><state name="Aborted"/><state name="UnhandledException"/></states>
        </workflowInstanceQuery>
      </workflowInstanceQueries>
      <faultPropagationQueries>
        <faultPropagationQuery faultSourceActivityName="*" faultHandlerActivityName="*"/>
      </faultPropagationQueries>
    </workflow>
  </trackingProfile>
</tracking>

事件寫入 Windows 事件日誌,可透過事件檢視器或 AppFabric 儀表板監控實例狀態、錯誤傳播、效能指標。

部署與消費

  • 開發期:VS 內建 Web Server (F5) 直接執行。
  • 生產期:部署至 IIS 或 AppFabric (提供儀表板、追蹤查詢、管理工具)。
  • 消費端:ASP.NET 專案 Add Service Reference → 產生 Proxy → 呼叫 EvaluateMortgage (對應首個 Receive) 啟動實例,後續狀態查詢對應其他 Receive。

消費端呼叫程式碼片段

總結

WF4 + WCF 4 實現了宣告式服務構建:Flowchart 建模業務流、自訂活動封裝可重用邏輯、關聯解決實例路由、持久化支援長期執行、ETW 追蹤提供生產可觀測性。全程零業務代碼,僅組態與設計器操作,極大降低分散式長期流程開發門檻。完整範例:MSDN Code Gallery。

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