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

WF4.0 基礎篇(19):Persistence 持久化機制與 SqlWorkflowInstanceStore 實戰

     編輯:關於.NET

WF4.0 持久化架構核心:InstanceStore (抽象存儲)、PersistenceParticipant (資料收集)、SqlWorkflowInstanceStore (SQL Server 實作)。持久化讓長期執行工作流能卸載記憶體、跨進程/機器恢復,是企業級應用關鍵能力。

持久化擁有者與鎖定機制

僅持久化未卸載時,實例被擁有者鎖定。嘗試由非擁有者載入會拋出 InstanceLockedException。InstanceLockedExceptionAction 可設定重試策略 (NoRetry/BasicRetry/AggressiveRetry)。

CacheMetadata 多次調用提醒

  • 啟動時:所有活動 CacheMetadata 被調用
  • 每次從持久化載入:再次全部調用

相關事件執行順序

PersistableIdle → Idle → Unloaded
完成時:Completed → Unloaded

SQL 持久化資料庫建立

腳本位於:%WinDir%\Microsoft.NET\Framework\v4.0.xxxxx\SQL\en\

  • SqlWorkflowInstanceStoreSchema.sql
  • SqlWorkflowInstanceStoreLogic.sql

SqlWorkflowInstanceStore 關鍵屬性

屬性表

  • ConnectionString、InstanceCompletionAction (DeleteAll/DeleteNothing)、InstanceEncodingOption (None/GZip)、InstanceLockedExceptionAction、HostLockRenewalPeriod
  • Promote 方法:將變數提升為可查詢的推廣屬性

三種持久化觸發方式

1. PersistableIdleAction.Unload (閒置自動持久化並卸載)

app.PersistableIdle = e => PersistableIdleAction.Unload;
app.Idle += (s,e) => Console.WriteLine($"Idle: {e.InstanceId}");
app.Unloaded += (s,e) => Console.WriteLine($"Unloaded: {e.InstanceId}");

2. 手動 Persist/Unload

app.Persist();  // 僅持久化
app.Unload();   // 持久化並卸載,觸發 Unloaded 事件

3. Persist 活動 (流程中任意點強制持久化)

Persist 活動

流程設計:Persist 活動流程

執行過程:持久化過程

InstanceView 檢視持久化資料

InstanceView 結構

可查詢 InstanceData、InstanceMetadata、InstanceKeys、InstanceState 等。

範例下載:PersistenceSample.rar

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