.NET Framework 4.6.1 中的工作流程開發會使用某些開發人員可能不熟悉的概念。 本主題描述一些概念及其實作方式。
工作流程和活動
工作流程是建立程式模型之動作的結構化集合。 工作流程中的每個動作都會模型化為活動。 主機會使用 WorkflowInvoker 像方法一樣地叫用工作流程,WorkflowApplication 明確控制單一工作流程實例的執行,以及在WorkflowServiceHost 的多重實例場合中,以訊息為基礎進行互動。 因為工作流程的步驟會定義為活動的階層,因此階層中最上層的活動可以說是定義工作流程本身。 此階層模型會取代舊版的明確 SequentialWorkflow
和 StateMachineWorkflow
類別。 活動本身是開發為其他活動的集合(使用 Activity 類別做為基底,通常是使用 XAML 所定義),或是使用 CodeActivity 類別來自定義,而該類別可以使用運行時間進行數據存取,或使用 NativeActivity 類別,將工作流程運行時間的廣度公開給活動作者。 使用 CodeActivity 和 NativeActivity 所開發的活動是使用 C# 等符合 CLR 規範的語言所建立。
活動數據模型
活動會使用下表所示的類型來儲存和共享數據。
類型 | 說明 |
---|---|
變數 | 將數據儲存在活動中。 |
論點 | 將數據移入和移出一個活動。 |
表現 | 在參數綁定中使用的活動,其回傳值具有提升效益。 |
工作流程運行時間
工作流程運行時間是工作流程執行所在的環境。 WorkflowInvoker 是執行工作流程的最簡單方式。 主機使用 WorkflowInvoker 作為以下用途:
同步啟動工作流程。
若要提供輸入或從工作流程中獲取輸出。
若要新增延伸模組以供活動使用。
ActivityInstance 是主機可用來與執行環境互動的線程安全 Proxy。 主機使用 ActivityInstance 作為以下用途:
若要藉由建立實例或從實例存放區載入它來取得實例。
收到實例生命週期事件的通知。
控制工作流程執行。
若要提供輸入或從工作流程中獲取輸出。
若要表示工作流程的延續,並將值傳遞到該工作流程中。
保存工作流程數據。
若要新增延伸模組以供活動使用。
活動會使用適當的 ActivityContext 衍生類別,例如 NativeActivityContext 或 CodeActivityContext,取得工作流程運行時間環境的存取權。 他們使用這個方法來解決爭論和變數、安排兒童活動,以及許多其他目的。
服務業
工作流程提供一種自然的方式,使用訊息活動來實作和存取鬆散耦合的服務。 傳訊活動建置在 WCF 上,是用來將數據傳入和移出工作流程的主要機制。 您可以將訊息活動組合在一起,以建立您想要的任何訊息交換模式模型。 如需詳細資訊,請參閱 傳訊活動。 使用WorkflowServiceHost類來託管工作流程服務。 如需詳細資訊,請參閱 主機工作流程服務概觀。 如需工作流程服務的詳細資訊,請參閱 工作流程服務
持久性、卸載和 Long-Running 工作流程
Windows 工作流程藉由提供下列項目來方便長時間運行的反應式程式的撰寫:
存取外部輸入的活動。
能夠建立 Bookmark 可由主機監聽器恢復的物件。
能夠保存工作流程的狀態數據並卸載工作流程,然後在特定工作流程中對象恢復時重載並重新激活工作流程。
工作流程會持續執行活動,直到沒有其他活動要執行,或直到所有目前執行的活動都在等候輸入為止。 在此後一種狀態中,工作流程處於閑置狀態。 主機通常會卸除閑置的工作流程,並在訊息送達時重載它們以繼續執行。 WorkflowServiceHost 提供這項功能的相關功能,並提供可擴展的卸載策略。 對於使用揮發性狀態數據或其他無法保存之數據的執行區塊,活動可以向主機指出不應該使用 NoPersistHandle來保存它。 工作流程也可以使用Persist活動,將其數據明確地保存到持久性存儲裝置中。