.NET Framework 4.5 中的 Windows Workflow Foundation 新功能

.NET Framework 4.5 中的 Windows Workflow Foundation (WF) 引進許多新功能,例如新的活動、設計工具功能和工作流程開發模型。 重新裝載的工作流程設計工具支援.NET Framework 4.5 中引進的許多但並非全部的新工作流程功能。 如需所支援新功能的詳細資訊,請參閱針對重新裝載的工作流程設計工具中新的 Workflow Foundation 4.5 功能提供的支援。 如需移轉.NET Framework 3.0 和 .NET Framework 3.5 工作流程應用程式以使用最新版本的詳細資訊,請參閱移轉指引。 本文提供 .NET Framework 4.5 中引進的新工作流程功能概觀。

警告

.NET Framework 4.5 中引進的新 Windows Workflow Foundation 功能不適用於以舊版架構為目標的專案。 如果以 .NET Framework 4.5 為目標的專案已重定為舊版架構,可能會發生數個問題。

  • 設計工具中的 C# 運算式會取代為訊息 [值已使用 XAML 設定]。
  • 會出現許多建置錯誤,包括下列錯誤。

檔案格式與目前的目標架構不相容。 若要轉換檔案格式,請明確儲存檔案。 當您儲存檔案並重新開啟設計工具之後,這則錯誤訊息就會消失。

工作流程版本控制

.NET Framework 4.5 引進了數個以新 WorkflowIdentity 類別為基礎的新版本功能。 WorkflowIdentity 提供工作流程應用程式作者一個機制,用於對持續性的工作流程執行個體與其定義。

活動

內建活動程式庫包含新的活動及現有活動的新功能。

NoPersist 範圍

NoPersistScope 是新的容器活動,當 NoPersistScope 的子活動還在執行時,可防止工作流程持續進行。 在不適合工作流程持續的情況下 (例如,當工作流程使用檔案控制代碼等特定電腦資源或在資料庫交易期間時),此活動非常有用。 以往為防止在活動執行期間發生持續的狀況,就需要使用 NativeActivity 的自訂 NoPersistHandle

新的流程圖功能

流程圖已針對 .NET Framework 4.5 更新,並具有下列新功能:

  • DisplayNameFlowSwitch<T> 活動的 FlowDecision 屬性皆可編輯。 這會讓活動設計工具顯示更多關於活動用途的資訊。

  • 流程圖有一個新的屬性,稱為 ValidateUnconnectedNodes,此屬性的預設值是 False。 如果此屬性設為 True,則未連接的流程圖節點會產生驗證錯誤。

支援部分信任

.NET Framework 4 中的工作流程需要完全信任的應用程式域。 在 .NET Framework 4.5 中,工作流程可以在部分信任環境中運作。 在部分信任環境中,可以使用協力廠商元件,而不將主機資源的完整存取權限授與這些元件。 以下是一些有關在部分信任環境中執行工作流程的疑慮:

  1. 在部分信任下,不支援使用 Interop 活動中包含的舊版元件 (包括規則)。

  2. 不支援在 WorkflowServiceHost 中於部分信任環境下執行工作流程。

  3. 部分信任案例中的持續例外狀況是潛在的安全性威脅。 若要停用持續例外狀況,必須在專案中加入 ExceptionPersistenceExtension 型別的擴充,才能選擇退出持續例外狀況。 下列程式碼範例示範如何實作此型別。

    public class ExceptionPersistenceExtension
    {
        public ExceptionPersistenceExtension()
        {
            this.PersistExceptions = false;
        }
        public bool PersistExceptions { get; set; }
    }
    

    如果不將例外情況序列化,請務必在 NoPersistScope 內使用例外狀況。

  4. 活動作者應該覆寫 CacheMetadata,避免工作流程執行階段自動針對型別執行反映。 引數和子活動不可為 null,且必須明確地呼叫 Bind。 如需覆寫 CacheMetadata 的詳細資訊,請參閱使用 CacheMetadata 公開資料。 此外,若引數執行個體的類型為 internalprivate,則必須在 CacheMetadata 中明確建立這些執行個體,避免透過反映來建立。

  5. 型別將不會使用 ISerializableSerializableAttribute 進行序列化,要序列化的型別必須支援 DataContractSerializer

  6. 使用 LambdaValue<TResult> 的運算式需要 RestrictedMemberAccess,因此不能在部分信任下運作。 使用 LambdaValue<TResult> 的工作流程應將這些運算式改為從 CodeActivity<TResult> 衍生而來的活動。 .

  7. 在部分信任下不能使用 TextExpressionCompiler 或裝載 Visual Basic 的編譯器來編譯運算式,但可以執行先前編譯的運算式。

  8. 使用層級 2 透明度的單一元件不能用於.NET Framework 4、完全信任.NET Framework 4.6.1,以及部分信任中的 .NET Framework 4.6.1。

新的設計工具功能

設計工具搜尋

為使大型工作流程更好管理,現在可透過關鍵字搜尋工作流程。 此功能僅適用於 Visual Studio;在重新裝載的設計工具中並不適用。 您可使用兩種搜尋功能:

  • 快速尋找,可使用 Ctrl+F 或 [編輯]、[尋找和取代]、[快速尋找] 啟動。

  • 檔案中尋找,可使用 [Ctrl+Shift+F] 或 [編輯]、[尋找和取代]、[在檔案中尋找] 啟動。

請注意,不支援 [取代] 功能。

快速尋找

在工作流程中搜尋的關鍵字將比對下列設計工具項目:

快速尋找會在設計工具的 ModelItem 樹狀結構中執行。 [快速尋找] 不會找出匯入工作流程定義中的命名空間。

檔案中尋找

在工作流程中搜尋的關鍵字會比對工作流程檔案的實際內容。 搜尋結果會顯示在 Visual Studio 的 [尋找結果] 檢視窗格中。 按兩下結果項目會巡覽至工作流程設計工具中包含相符項目的活動。

變數和引數設計工具中的刪除內容功能表項目

在 .NET Framework 4 中,變數和引數只能在設計工具中使用鍵盤刪除。 從 .NET Framework 4.5 開始,可以使用操作功能表刪除變數和引數。

下列螢幕擷取畫面顯示變數和引數設計工具內容功能表。

變數和引數設計工具內容功能表

使用 Sequence 進行 Auto-surround

由於工作流程或特定容器活動 (如 NoPersistScope) 只能包含單一主體活動,因此開發人員必須先刪除第一個活動、加入 Sequence 活動,然後將這兩個活動同時加入序列活動中,才能加入第二個活動。 從 .NET Framework 4.5 開始,將第二個活動新增至設計工具介面時,系統會自動建立活動來包裝這兩個 Sequence 活動。

下列螢幕擷取畫面顯示 WriteLine 活動,此活動位在 BodyNoPersistScope 中。

NoPersistScope 活動主體中的 WriteLine 活動。

當第二個 Sequence 降到第一個之下時,下列螢幕擷取畫面會顯示在 Body 中自動建立的 WriteLine 活動。

NoPersistScope 主體中自動建立的序列。

移動瀏覽模式

若要更輕鬆地在設計工具中巡覽大型工作流程,可以啟用移動瀏覽模式,讓開發人員能夠透過按一下與拖曳方式來移動工作流程的可見部分,而不需使用捲軸。 啟用移動瀏覽模式的按鈕位於設計工具的右下角。

下列螢幕擷取畫面顯示位於工作流程設計工具右下角的移動瀏覽按鈕。

工作流程設計工具中醒目提示的 [移動瀏覽] 按鈕。

您也可以使用滑鼠中鍵或空白鍵移動瀏覽工作流程設計工具。

複選

可以拖放矩形選取所要的活動 (未啟用移動瀏覽模式時),或是按住 Ctrl 鍵並依序按一下所需的活動,同時選取多個活動。

您也可以在設計工具中拖放多個活動選取項目,或者使用內容功能表與選取項目互動。

工作流程項目的大綱檢視

為簡化階層工作流程的巡覽功能,工作流程的元件會顯示在樹狀大綱檢閱中。 大綱檢視會顯示在 [文件大綱] 檢視中。 若要開啟此檢視,請從最上方的功能表選取 [檢視]、[其他視窗]、[文件大綱],或者按下 Ctrl + W、U。 按一下大綱檢視中的節點,會巡覽至工作流程設計工具中對應的活動,且大綱檢視會更新以顯示在設計工具中選取的活動。

下列已完成工作流程的螢幕擷取畫面 (擷取自快速入門教學課程) 顯示序列化工作流程的大綱檢視。

Visual Studio 中具有循序工作流程的大綱檢視螢幕擷取畫面。

C# 運算式

在.NET Framework 4.5 之前,工作流程中的所有運算式只能以 Visual Basic 撰寫。 在 .NET Framework 4.5 中,Visual Basic 運算式僅用於使用 Visual Basic 建立的專案。 Visual C# 專案現在使用 C# 來撰寫運算式。 提供功能完整的 C# 運算式編輯器,可使用反白顯示文法及 Intellisense 等功能。 在舊版中使用 Visual Basic 運算式建立的 C# 工作流程專案仍可繼續運作。

C# 運算式會在設計階段進行驗證。 C# 運算式中的錯誤會用紅色的波浪底線標記。

如需 C# 運算式的詳細資訊,請參閱 C# 運算式

更多殼層列及標頭項目的可見度控制功能

在重新裝載的設計工具中,部分標準 UI 控制項可能對特定工作流程沒有意義,而且可能是關閉狀態。 在 .NET Framework 4 中,只有設計工具底部的殼層列才支援此自訂。 在 .NET Framework 4.5 中,設計工具頂端殼層標頭專案的可見度可以藉由使用適當的 ShellHeaderItemsVisibility 值來 WorkflowShellHeaderItemsVisibility 調整。

流程圖與狀態機器工作流程中的自動連接和自動插入

在 .NET Framework 4 中,流程圖工作流程中的節點之間的連線必須手動新增。 在 .NET Framework 4.5 中,流程圖和狀態機器節點的自動連接點會在活動從工具箱拖曳到設計工具介面時變成可見。 將活動拖曳到其中一點上,會自動加入該活動及必要的連接。

下列螢幕擷取畫面顯示從工具箱拖曳活動時顯示的附加點。

顯示自動連接點的流程圖開始節點

您也可以將活動拖曳到流程圖節點和狀態之間的連接,以在其他兩個節點之間自動插入該節點。 下列螢幕擷取畫面顯示反白顯示的連接線,在此可以從工具箱中拖曳及放置活動。

用於置放活動的自動插入控點

設計工具標註

為方便開發大型工作流程,設計工具現已支援加入標註,以追蹤設計流程。 您可以在活動、狀態、流程圖節點、變數和引數中加入標註。 下列螢幕擷取畫面顯示用來將標註加入設計工具的操作功能表。

顯示新增註釋的功能表螢幕擷取畫面。

偵錯狀態

在 .NET Framework 4 中,非活動元素無法支援偵錯中斷點,因為它們不是執行的單位。 此版本提供一種機制,可在 State 物件中加入中斷點。 在 State 中設定中斷點時,若在排定輸入活動或觸發程序前轉換狀態,就會中斷執行。

在設計工具中定義與取用 ActivityDelegate 物件

.NET Framework 4 中的活動會使用 ActivityDelegate 物件來公開執行點,其中工作流程的其他部分可以與工作流程的執行互動,但使用這些執行點通常需要相當大量的程式碼。 在這個版本中,開發人員可以使用工作流程設計工具來定義及取用活動委派。 如需詳細資訊,請參閱如何:定義並取用工作流程設計工具中的活動委派

建置階段驗證

在 .NET Framework 4 中,工作流程驗證錯誤不會計入工作流程專案的建置期間發生組建錯誤。 這表示,即使有工作流程驗證錯誤,仍可能成功建置工作流程專案。 在 .NET Framework 4.5 中,工作流程驗證錯誤會導致組建失敗。

設計階段背景驗證

在 .NET Framework 4 中,工作流程已驗證為前景進程,這可能會在複雜或耗時的驗證程式期間封鎖 UI。 現在,工作流程驗證會在背景執行緒中進行,因此不會封鎖 UI。

檢視狀態在 XAML 檔案中的獨立位置

在 .NET Framework 4 中,工作流程的檢視狀態資訊會儲存在多個不同位置的 XAML 檔案中。 對於想要直接讀取 XAML 或撰寫程式碼來移除檢視狀態資訊的開發人員來說,這樣很不方便。 在 .NET Framework 4.5 中,XAML 檔案中的檢視狀態資訊會序列化為 XAML 檔案中的個別元素。 開發人員可輕鬆地找出並編輯活動的檢視狀態資訊,或完全移除檢視狀態。

運算式擴充性

在 .NET Framework 4.5 中,我們提供一種方式讓開發人員建立自己的運算式和運算式撰寫體驗,可插入工作流程設計工具。

在重新裝載設計工具中,選擇使用 Workflow 4.5 功能

為了保留回溯相容性,.NET Framework 4.5 中包含的某些新功能預設不會在重新裝載的設計工具中啟用。 這是為了確保現有的應用程式 (使用重新裝載設計工具) 不會因為更新至最新版本而中斷。 若要在重新裝載的設計工具中啟用新功能,請將 TargetFrameworkName 設為 ".NET Framework 4.5",或者設定 DesignerConfigurationService 的個別成員以啟用個別功能。

新的工作流程開發模型

除了流程圖和循序工作流程開發模型外,此版本還包括狀態機器工作流程和合約優先工作流程服務。

狀態機器工作流程

狀態機器工作流程是Microsoft .NET Framework 4 平臺更新 1中.NET Framework 4.0.1 版的一部分引進。 此更新包括若干新類別和活動,可讓開發人員建立狀態機器工作流程。 這些類別和活動已針對 .NET Framework 4.5 進行更新。 更新包括:

  1. 可設定狀態中斷點的功能

  2. 可在工作流程設計工具中複製和貼上轉換的功能

  3. 設計工具支援建立共用的觸發程序轉換

  4. 用來建立狀態機器工作流程的活動包括:StateMachineStateTransition

下列螢幕擷取畫面顯示使用者入門教學課程步驟如何:建立狀態機器工作流程中的已完成狀態機器工作流程。

顯示已完成狀態機器工作流程的圖例。

如需建立狀態機器工作流程的詳細資訊,請參閱狀態機器工作流程

合約優先工作流程開發

合約優先工作流程開發工具可讓開發人員在 Code First 中設計合約,然後,只要在 Visual Studio 中按幾下滑鼠,就可在代表各作業的工具箱中自動產生活動範本。 之後,這些活動可以用於建立工作流程,以實作合約所定義的作業。 工作流程設計工具將會驗證工作流程服務,以確保這些作業都有進行實作且工作流程的簽章與合約簽章相符。 開發人員也可以在工作流程服務與實作合約的集合之間建立關聯。 如需合約優先工作流程服務開發的詳細資訊,請參閱如何:建立會取用現有服務合約的工作流程服務