共用方式為


基本 Windows 工作流程概念

.NET Framework 4.6.1 中的工作流程開發會使用某些開發人員可能不熟悉的概念。 本主題描述一些概念及其實作方式。

工作流程和活動

工作流程是建立程式模型之動作的結構化集合。 工作流程中的每個動作都會模型化為活動。 主機會使用 WorkflowInvoker 像方法一樣地叫用工作流程,WorkflowApplication 明確控制單一工作流程實例的執行,以及在WorkflowServiceHost 的多重實例場合中,以訊息為基礎進行互動。 因為工作流程的步驟會定義為活動的階層,因此階層中最上層的活動可以說是定義工作流程本身。 此階層模型會取代舊版的明確 SequentialWorkflowStateMachineWorkflow 類別。 活動本身是開發為其他活動的集合(使用 Activity 類別做為基底,通常是使用 XAML 所定義),或是使用 CodeActivity 類別來自定義,而該類別可以使用運行時間進行數據存取,或使用 NativeActivity 類別,將工作流程運行時間的廣度公開給活動作者。 使用 CodeActivityNativeActivity 所開發的活動是使用 C# 等符合 CLR 規範的語言所建立。

活動數據模型

活動會使用下表所示的類型來儲存和共享數據。

類型 說明
變數 將數據儲存在活動中。
論點 將數據移入和移出一個活動。
表現 在參數綁定中使用的活動,其回傳值具有提升效益。

工作流程運行時間

工作流程運行時間是工作流程執行所在的環境。 WorkflowInvoker 是執行工作流程的最簡單方式。 主機使用 WorkflowInvoker 作為以下用途:

  • 同步啟動工作流程。

  • 若要提供輸入或從工作流程中獲取輸出。

  • 若要新增延伸模組以供活動使用。

ActivityInstance 是主機可用來與執行環境互動的線程安全 Proxy。 主機使用 ActivityInstance 作為以下用途:

  • 若要藉由建立實例或從實例存放區載入它來取得實例。

  • 收到實例生命週期事件的通知。

  • 控制工作流程執行。

  • 若要提供輸入或從工作流程中獲取輸出。

  • 若要表示工作流程的延續,並將值傳遞到該工作流程中。

  • 保存工作流程數據。

  • 若要新增延伸模組以供活動使用。

活動會使用適當的 ActivityContext 衍生類別,例如 NativeActivityContextCodeActivityContext,取得工作流程運行時間環境的存取權。 他們使用這個方法來解決爭論和變數、安排兒童活動,以及許多其他目的。

服務業

工作流程提供一種自然的方式,使用訊息活動來實作和存取鬆散耦合的服務。 傳訊活動建置在 WCF 上,是用來將數據傳入和移出工作流程的主要機制。 您可以將訊息活動組合在一起,以建立您想要的任何訊息交換模式模型。 如需詳細資訊,請參閱 傳訊活動。 使用WorkflowServiceHost類來託管工作流程服務。 如需詳細資訊,請參閱 主機工作流程服務概觀。 如需工作流程服務的詳細資訊,請參閱 工作流程服務

持久性、卸載和 Long-Running 工作流程

Windows 工作流程藉由提供下列項目來方便長時間運行的反應式程式的撰寫:

  • 存取外部輸入的活動。

  • 能夠建立 Bookmark 可由主機監聽器恢復的物件。

  • 能夠保存工作流程的狀態數據並卸載工作流程,然後在特定工作流程中對象恢復時重載並重新激活工作流程。

工作流程會持續執行活動,直到沒有其他活動要執行,或直到所有目前執行的活動都在等候輸入為止。 在此後一種狀態中,工作流程處於閑置狀態。 主機通常會卸除閑置的工作流程,並在訊息送達時重載它們以繼續執行。 WorkflowServiceHost 提供這項功能的相關功能,並提供可擴展的卸載策略。 對於使用揮發性狀態數據或其他無法保存之數據的執行區塊,活動可以向主機指出不應該使用 NoPersistHandle來保存它。 工作流程也可以使用Persist活動,將其數據明確地保存到持久性存儲裝置中。