基本 Windows Workflow 概念
.NET Framework 4.6.1 中的工作流程開發運用了某些開發人員未曾接觸過的概念。 本主題描述其中的部分概念及其實作方式。
工作流程與活動
工作流程是結構化的動作集合,這些動作會以處理序為模型。 工作流程中的每一個活動都會製作成活動的模型。 主機與工作流程互動的方式,是使用 WorkflowInvoker 將工作流程當作方法來叫用,以 WorkflowApplication 明確控制單一工作流程執行個體的執行,並以 WorkflowServiceHost 在多執行個體案例中進行以訊息為基礎的互動。 由於工作流程的步驟定義為活動的階層,因此階層中最上方的活動可說是用於定義工作流程本身。 這個階層模型取代了舊版中明確的 SequentialWorkflow
及 StateMachineWorkflow
類別。 活動本身會開發做為其他活動的集合 (使用 Activity 類別做為基底,通常使用 XAML 來定義),或是使用 CodeActivity 類別 (可以使用執行階段進行資料存取) 或 NativeActivity 類別 (會向活動作者公開工作執行階段的廣度),以自訂方式來建立。 使用 CodeActivity 和 NativeActivity 來開發的活動,是使用 CLR 相容語言 (例如 C#) 開發而成。
活動資料模型
活動會使用下表顯示的型別來儲存及共用資料。
類型 | 描述 |
---|---|
變數 | 將資料儲存在活動中。 |
引數 | 將資料移入與移出活動。 |
運算式 | 具有提升用於引數繫結之傳回值的活動。 |
工作流程執行階段
工作流程執行階段是工作流程的執行環境。 WorkflowInvoker 是執行工作流程最簡單的方式。 主機會使用 WorkflowInvoker 進行下列作業:
同步叫用工作流程。
提供輸入至工作流程,或從工作流程擷取輸出。
加入活動所使用的擴充。
ActivityInstance 是具備執行緒安全的 Proxy,主機可利用它來與執行階段互動。 主機會使用 ActivityInstance 進行下列作業:
透過建立執行個體,或從執行個體存放區載入來取得執行個體。
收到執行個體開發週期事件通知。
控制工作流程的執行。
提供輸入至工作流程,或從工作流程擷取輸出。
發出工作流程接續的訊號並將值傳入工作流程中。
保存工作流程資料。
加入活動所使用的擴充。
藉由使用適當的 ActivityContext 衍生類別 (例如 NativeActivityContext 或 CodeActivityContext),活動可以存取工作流程執行階段環境。 並且會利用這種方式解析引數與變數、排程子活動,以及用於許多其他用途。
服務
工作流程利用傳訊活動,提供自然的方式來實作及存取鬆散耦合服務。 傳訊活動以 WCF 為基礎,同時也是用於將資料傳入及傳出工作流程的主要機制。 您可以一起撰寫傳訊活動,針對您所需的任何傳訊交換型式建立模型。 如需詳細資訊,請參閱傳訊活動。 工作流程服務是使用 WorkflowServiceHost 類別裝載的。 如需詳細資訊,請參閱工作流程服務概觀。 如需更多關於工作流程服務的資訊,請參閱工作流程服務
持續性工作流程、卸載工作流程,以及長期執行工作流程
Windows 工作流程透過提供下列功能,簡化長期執行反應式程式的製作:
工作流程會持續執行活動,直到沒有其他可執行的活動,或者直到目前所有執行中的活動均在等候輸入為止。 在第二種狀態中,工作流程是閒置的。 主機通常會卸載閒置的工作流程,並在訊息抵達時重新載入該工作流程以繼續執行。 WorkflowServiceHost 提供此特性的功能,並且提供可延伸的卸載原則。 針對使用變動性狀態資料或其他無法保存之資料的執行區塊,活動可以使用 NoPersistHandle 向主機指示不應保存資料。 工作流程也可以利用 Persist 活動,將其資料明確地保存至長期性的儲存媒體中。