<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      毛毛的小窩 — 關注技術交流、讓我們一起成長

      導航

      WF學習系列之二:開發工作流知識點概述

       

      注:本文從msdn中摘錄而成,主要提供有關創建工作流時的可用功能的概念性信息。主要介紹以下15個方面:

      1 工作流創作樣式 :主要包括順序工作流、狀態機工作流、數據驅動工作流。

      2 工作流創作模式 :分為三種,包括僅限代碼、代碼分離、無代碼。典型的用法是使用設計器定義工作流,使用代碼表示業務邏輯。

      3 使用活動控制流 :使用一些活動來控制工作流的邏輯流。

      4 在工作流中使用條件 :利用條件來控制工作流的行為。

      5 在工作流中使用 RuleSet :規則的定義,需要好好研究,也是非常關鍵的一個知識點。

      6 使用工作流中的事務 :通過TransactionScopeActivity, CompensatableTransactionScopeActivity活動來支持事務故障恢復。

      7 工作流中的批處理狀態信息 :通過IWorkBatch IPendingWork 來獲取服務和工作流實例保留狀態信息。

      8 工作流中的錯誤處理 詳見《WF學習系列之一》

      9 在工作流中使用補償 詳見《WF學習系列之一》

      10 在工作流中使用工作流更改 :重點了解什么情況下適合更改工作流,有什么限制條件等。

      11 工作流中的數據交換 詳見《WF學習系列之一》

      12 在工作流中使用角色 WF 提供了一種用于對所有支持數據輸入的活動的、基于角色的訪問機制。

      13 如何:編譯工作流 :根據工作流創作模式的不同,編譯的方式也有區別。

      14 如何:序列化工作流 :序列化和反序列化是實現工作流持久化的基礎。

      15 使用工作流標記 :使用可擴展應用程序標記語言 (XAML) 創建標記源文件從而創建工作流的聲明性方式。

       

      1 工作流創作樣式

            Windows Workflow Foundation 支持多種工作流創作樣式,如順序、狀態機和數據驅動。 順序樣式非常簡單,對于總是相同的重復、可預測操作很有用。 狀態機工作流樣式包含一組事件驅動狀態。 數據驅動樣式依賴數據來確定是否基于本地數據狀態來運行某些活動。

            順序工作流

            順序工作流樣式按逐個順序執行一組包含的活動。 您可以向順序工作流添加其他復合活動以實現并行 (ParallelActivity)、事件驅動并行 (EventHandlingScopeActivity)、數據驅動執行 (ConditionedActivityGroup)、事件驅動分支 (ListenActivity) 熟悉的強制性控制流模式,如條件分支 (IfElseActivity) 和迭代(WhileActivityReplicatorActivity)。 您也可以利用 Windows Workflow Foundation 的擴展性編寫自定義復合活動,用這些活動實現您的解決方案需要的特定控制流模式。

      下面的流程圖顯示一個順序工作流的示例。

       

      順序工作流按順序方式執行活動,直到最后一個活動完成。 即使在正常操作下,順序工作流也不必是完全確定的。 例如,您可以使用 ListenActivity 活動或 ParallelActivity 活動,在這兩種情況下事件的準確順序可以不同。

       

            狀態機工作流

            在工作流創作的狀態機樣式中,作者將工作流建模為狀態機。 工作流本身由一組狀態組成。 將一個狀態指示為初始狀態。 每個狀態都可以接收一組特定事件。 視事件而定,可以轉換到另一個狀態。 狀態機工作流可以有最終狀態。 當對最終狀態進行轉換時,工作流將完成。

            下面的流程圖是一個狀態機工作流的示例。

       

       

      活動

      說明

      EventDrivenActivity

      用于依賴于外部事件開始執行的狀態 EventDrivenActivity 活動必須具有實現 IEventActivity 接口作為第一個子活動的活動。 有關更多信息請參見使用 EventDrivenActivity 活動

      SetStateActivity

      指定到新狀態的轉換 有關更多信息,請參見使用 SetStateActivity 活動

      StateActivity

      表示狀態機中的一個狀態;可能包含其他 State 活動。 有關更多信息,請參見使用 StateActivity 活動

      StateInitializationActivity

      進入某個狀態時執行;可能包含其他活動 有關更多信息,請參見使用 StateInitializationActivity 活動

      StateFinalizationActivity

      在離開 StateActivity 活動時執行包含的活動 有關更多信息請參見使用 StateFinalizationActivity 活動

       

       

      2 工作流創作模式

            Windows Workflow Foundation 默認將工作流定義與業務邏輯相分離。 在典型的工作流創作方案中工作流創建者可以使用設計器來指定工作流定義然后使用 C# Visual Basic 代碼來表示業務邏輯。 這種創作模式稱為代碼分離

          Windows Workflow Foundation 支持以下針對工作流實現的創作模式

          僅限代碼 這是 Windows Workflow Foundation 的默認創作模式。 在該模式下可以使用 C# Visual Basic 代碼來指定使用 Windows Workflow Foundation API 集的工作流。 在僅限代碼的工作流中工作流定義使用 C# Visual Basic 代碼來聲明工作流結構。 僅限代碼的工作流必須進行編譯。

          代碼分離。 在此模式下,可以通過使用工作流標記并將其與 C# 或 Visual Basic 代碼隱藏實現進行組合來定義工作流,這與 ASP.NET 模型類似。 與無代碼創作模式不同,代碼分離的工作流必須進行編譯,并且無法直接加載到工作流運行時引擎。

          無代碼。 在此模式下,可以通過使用工作流標記來創作工作流。然后可以使用 Windows Workflow Foundation 命令行工作流編譯器來編譯工作流,也可以通過宿主應用程序將工作流標記文件加載到工作流運行時引擎。

       

      3 使用活動控制流

            Windows Workflow Foundation 包含一組可提供各種功能的活動。 使用其中的一些活動可以控制工作流的邏輯流。 有關 Windows Workflow Foundation 基本活動庫中的活動的完整列表請參見 Windows Workflow Foundation 活動。

      下表列出了 Windows Workflow Foundation 基本活動庫中可用于控制工作流邏輯流的活動。

      活動

      說明

      ListenActivity

      允許工作流根據某種事件或超時期限到期,進行條件分支。 有關更多信息,請參見使用 ListenActivity 活動

      IfElseActivity

      測試每個分支條件,在第一個條件為 True 的分支上執行活動。 有關更多信息,請參見使用 IfElseActivity 活動

      ParallelActivity

      允許工作流執行相互獨立的兩個或更多操作。 有關更多信息,請參見使用 ParallelActivity 活動

      SuspendActivity

      掛起工作流的操作,以便能夠在出現某種錯誤條件時進行干預。 有關更多信息,請參見使用 SuspendActivity 活動

      TerminateActivity

      用于在出現某種錯誤條件時立即結束工作流的操作。 有關更多信息,請參見使用 TerminateActivity 活動

      WhileActivity

      使工作流能夠在條件得到滿足之前進行循環。 有關更多信息,請參見使用 WhileActivity 活動

      ConditionedActivityGroup

      也稱為 CAG 根據應用于 CAG 本身的條件以及分別應用于每個子活動的條件來執行子活動。 有關更多信息,請參見使用 ConditionedActivityGroup 活動

      EventDrivenActivity

      包裝另一個活動,并在發生指定事件時執行該活動。 有關更多信息,請參見使用 EventDrivenActivity 活動

      ReplicatorActivity

      創建和執行子活動的多個實例。 有關更多信息,請參見使用 ReplicatorActivity 活動

      SequenceActivity

      根據一種已定義的排序方式,運行一組子活動。 有關更多信息,請參見使用 SequenceActivity 活動

       

       

      4 在工作流中使用條件

          可以使用條件來控制工作流的行為。 運行時引擎計算條件的值,然后根據計算結果執行操作。

          有兩種方法可以在工作流中表示條件:

      在代碼中可以通過編寫處理程序來表示條件,該處理程序為條件設置 Result 屬性。

      還可以將條件表示為規則條件,規則條件是規則文件中的 System.CodeDom 表達式。

         

          條件活動

          隨 Windows Workflow Foundation 一起提供的幾個活動使用以下條件:

      第一個是 IfElseBranchActivity,它包含在 IfElseActivity 活動中,在具有的條件計算結果為 True 時執行。

      只要 WhileActivity 活動的條件計算結果為 true,它就會連續執行所包含的任何活動。 每次循環完成時重新計算該條件。

      ConditionedActivityGroup 連續執行所包含的任何活動,直到其條件計算結果為 true。 ConditionedActivityGroup 中的每個單個活動都具有 When 條件。 僅當 When 條件計算結果為 true 時才執行各個活動。

      ReplicatorActivity 在其 UntilCondition 屬性計算結果為 true 時完成執行。

      也可以在您創建的自定義活動中使用條件。

       

      注意: 

          規則條件和代碼條件可以引用在工作流類中定義的公共、私有和內部成員。

       

      5 在工作流中使用 RuleSet

      RuleSet 由一個或多個規則條件及其導致的操作組成。可以將規則視為 IF-THEN-ELSE 語句,其中,條件對應于 IF,而操作定義 THEN 和 ELSE 子句的行為。

      操作可以執行以下任務:

      ·    設置工作流上的字段或屬性。

      ·    調用工作流上或工作流中的對象上的方法。

      ·    調用被引用程序集中的類型上的靜態方法。

      ·    執行 Halt 或 Update 語句。

      ·    Windows Workflow Foundation 規則引擎設計為以基于優先級的方式運行規則并且支持正向鏈接。

       

       

      6 使用工作流中的事務

          Windows Workflow Foundation 通過使用 TransactionScopeActivity 活動包裝 .NET Framework System.Transactions 事務(如果發生錯誤,這些事務會自動回滾它們的操作)來支持從事務故障恢復。有關 System.Transactions 的更多信息,請參見 .NET Framework System.Transactions.Transaction 和 System.Transactions.TransactionScope 類及 MSDN 庫中的相關類型。

          CompensatableTransactionScopeActivity 活動像 TransactionScopeActivity 活動一樣對事務進行包裝,只不過前者還支持補償。

       

      7 工作流中的批處理狀態信息

          工作流定期在各個檢查點(稱為持久性點)將其狀態保存到持久性存儲中。 如果在工作流中出現錯誤,則可能需要運行時引擎檢索保留的該信息以恢復穩定狀態。 如果兩個或多個組件正在進行通信,則通常情況下,最好協調持久性存儲以便組件的狀態保持一致。 工作流的外部服務使用工作批次來保留狀態信息。 這些服務對其工作項進行批處理并共享與工作流的事務相同的事務。如果工作流尚未提交事務,則服務仍可以在持久點期間對某些工作項進行批處理。

          Windows Workflow Foundation 提供 IWorkBatch 和 IPendingWork 以幫助服務和工作流實例保留狀態信息。

          在對從工作流初始化的服務進行的所有調用中,運行時引擎在其線程調用上下文中提供一個 IWorkBatch。 服務可以將掛起的工作項添加到此工作批次,以便運行時引擎可以在單個事務中提交所有相關的工作項。

          若要將工作項添加到批次中或向批次注冊,請使用下面的語句:

      WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

          此外,還可以將 IPendingWork 傳入 ExternalDataEventArgs 的構造函數。

       

          調用組件時的操作順序

      1) 在初始化期間,工作流創建一個工作批次。

      2) 工作流將工作批次附加到對組件的方法調用中。通過使用 WorkflowEnvironment 類,服務可以訪問其任何方法中的工作批次。

       

          提交點處的操作順序

      1) 工作流創建一個事務。

      2) 工作流循環訪問工作批次并收集組件的所有工作項(保持順序)以創建工作批次。工作流傳入事務和工作批次,調用組件上的 Commit 方法。

      3) 組件將工作批次中的工作添加到事務。

      4) 對工作項在工作批次中的所有組件重復第 2 步和第 3 步。

      5) 當 Commit 通知成功時,工作流提交對應的事務。

      6) 成功提交事務后,工作流循環訪問工作批次并收集每個組件的所有工作項(如第 2 步所述)。工作流傳入對應的事務和工作批次,調用每個組件的 Complete 方法。

       

          對工作流錯誤的操作順序

      1) 工作流標識所有與出錯范圍相關的工作項并構建一個工作批次。

      2) 工作流調用每個唯一的、將工作批次中所有工作的完成狀態設置為 false 的 IPendingWork 的 Complete 方法。

      3) 如果工作批次屬于 TransactionScopeActivity 活動或 CompensatingTransactionScopeActivity 活動的子上下文,則工作流放棄工作批次中的所有工作。

      4) 從錯誤恢復后,運行時保持對所有剩余工作批次項的引用。隨后,可能會在將來的持久點提交該工作。

       

          重試工作批次事務

          DefaultWorkflowCommitWorkBatchService、SharedConnectionWorkflowCommitWorkBatchService、SqlWorkflowPersistenceService 和 SqlTrackingService 都具有重試工作批次提交的功能。 此功能通過 EnableRetries 屬性啟用,它使這些服務能夠在網絡超時、計算機重新啟動、SQL Server 進程重置等情況下一直嘗試提交工作批次。重試次數設置為 20。前三次重試會依次緊接著發生。 此后,每個后續重試之間都有一段延遲。 應用程序可以在其連接字符串中調整連接超時以部分地調整重試的時間間隔。可以通過編程方式或配置文件設置此屬性。有關如何通過編程方式設置此屬性的更多信息,請參見每個服務的 EnableRetries 屬性。 有關如何通過配置文件設置此屬性的更多信息,請參見Workflow Configuration Files。

       

      8 工作流中的錯誤處理

          Windows Workflow Foundation 中的錯誤處理指的是以異步方式處理異常。 這意味著工作流運行時引擎會捕獲在活動中(顯式或隱式)引發的異常,然后將其安排在隊列中以便以后處理。這與常規異常處理不同,因為在常規異常處理中,如果異常是在 try 塊中引發的,則它可以由相應的 catch exception 塊捕獲,也可以立即對用戶引發。詳見《WF學習系列之一》

       

      9 在工作流中使用補償

          已完成事務的 Windows Workflow Foundation 補償模型是一個處理工作流中發生的任何業務異常并合乎邏輯地撤消已完成事務的過程。詳見《WF學習系列之一》

       

      10 在工作流中使用工作流更改

          工作流更改使您可以在運行時對正在運行的工作流實例進行更改。 這些更改可能由設計時的省略、對活動的屬性和綁定的更改,或對增強和更完整地模擬業務過程的業務邏輯的需要而激發。 工作流更改不適合要進行整體更改的情況,因為這將導致工作流與原始設計原則產生極大差別。在此類情況下,應設計一個新的工作流,而不是對正在運行的實例進行更改。

          工作流更改適用于工作流的單個實例。 工作流更改不支持基于類型的更改,基于類型的更改會復制到給定工作流類型的所有正在運行的實例和將來的實例

          可以使用工作流更改執行以下操作

      ·    更改工作流結構,例如添加或移除活動。

      ·    更改流控制。

          以下是一些常見的工作流更改的示例

      ·    更改由 PolicyActivity 活動使用的 RuleSet。

      ·    更新 RuleCondition 定義,以更改分支活動(如 ConditionedActivityGroup 和 IfElseActivity)的行為。

      ·    添加新的自定義活動或 InvokeWorkflowActivity 活動(如果在部署和開始運行工作流之后,必須向該工作流中添加新的業務過程)。

      ·    在工作流的外部使用工作流標記以聲明方式創作更改,并接受將更新的標記作為參數來進行更改。

      ·    添加新的 EventDrivenActivity 活動以響應新事件,例如其他批準步驟。

          將工作流更改應用于正在運行的工作流可能會在兩個不同的入口點發生:在工作流代碼文件中和工作流外部(如工作流宿主)。

         工作流更改的限制

          以下是由 Windows Workflow Foundation 實施的工作流更改的一些限制,您必須清楚這些限制:

      ·    可以添加或移除工作流實例中的活動,但無法更改現有活動的屬性,除非這些屬性是聲明性規則條件或規則集。

      ·    將子活動作為其定義的一部分加入的自定義復合活動類型不能包含動態添加或移除的子活動。 這是因為,類似這樣的自定義復合活動是黑盒活動,不能在運行時期間進行根本修改。

      ·    運行時期間,無法動態移除不處于 Initialized 或 Closed 狀態的活動。

      ·    工作流開發人員可以通過附加到工作流的根活動的 ActivityCondition 來限制對工作流更改的使用,工作流的根活動由工作流運行時用于確定是否允許對特定的工作流實例進行任何工作流更改。

          自定義復合活動可以驗證建議的更改,例如添加或移除子活動。 這使活動開發人員可以確定是否任何建議的工作流更改與其活動的預期功能相沖突。此功能通過自定義 ActivityValidator 提供,開發人員可以在其中重寫 ValidateActivityChange 方法并添加其自定義的工作流更改驗證邏輯。

       

      11 工作流中的數據交換

          Windows Workflow Foundation 通信服務支持在工作流與其宿主環境之間進行數據交換。通過 Windows Workflow Foundation 通信服務,工作流可以使用 HandleExternalEventActivity 和 CallExternalMethodActivity 類以及支持 ExternalDataExchangeAttribute 屬性的接口與本地宿主交換數據。詳見《WF學習系列之一》

       

      12 在工作流中使用角色

          Windows Workflow Foundation 提供了一種用于對所有支持數據輸入的活動的、基于角色的訪問機制。 工作流創建者可以完全控制如何創建角色和角色集合。這樣將使創建者能夠提供必要的授權機制,在執行活動之前驗證調用者的角色。

          某些 Windows Workflow Foundation 活動(如 WebServiceInputActivity 和 HandleExternalEventActivity)提供用于獲取或設置角色集合的屬性。

          為了使用 Active Directory 來幫助開發工作流,Windows Workflow Foundation 提供了一種現成可用的機制來創建支持 Active Directory 的角色。 有關基于 .NET Framework 安全性和 Active Directory 的信息,請參見 MSDN Library。

          有關角色的更多信息,請參見 Windows Workflow Foundation 類庫參考中的 System.Workflow.Activities 命名空間的 WebWorkflowRole、WorkflowRole 和 ActiveDirectoryRole 類。

       

      13 如何:編譯工作流

          您可以通過三種方法來構造工作流:

      ·    以聲明方式在文件名為 extension .xoml 的工作流標記文件中使用工作流標記。 然后,可使用工作流編譯器編譯該工作流文件,或者不對它進行編譯,而通過主機應用程序將它傳遞到工作流運行時引擎中。 這稱為無代碼工作流創作 有關更多信息,請參見使用工作流標記。所創建的文件使用的文件擴展名為 .xoml。

      ·    標記文件可用于聲明工作流,但之后會使用包含實現邏輯的代碼文件對它進行編譯。 這稱為代碼分離工作流創作 在這種情況下,所創建的文件使用的文件擴展名為 .xoml 和 .xoml.cs 或 .xoml.vb。

      ·    在代碼文件中使用 Windows Workflow Foundation 對象模型。 這稱為僅限代碼工作流創作在這種情況下,所創建的文件使用標準的 C# 或 Visual Basic 源代碼文件擴展名。 此外,也會對這些文件進行編譯。

       

          編譯過程

          編譯工作流時,會在編譯過程中執行下列過程:

      ·    執行驗證可以確保根據工作流活動為自己設置的規則驗證這些活動。 如果存在驗證錯誤,則編譯器會返回錯誤列表。

      ·    根據在編譯器中輸入的標記定義來生成一個分部類。

      ·    執行代碼可以幫助在運行時執行活動。 生成事件訂閱,事件訂閱可幫助活動了解它們所包含的活動何時執行完畢。

      ·    在 .NET Framework C# 或 Visual Basic 編譯器中輸入根據標記文件生成的分部類以及根據代碼文件生成的分部類。此過程的輸出為 .NET 程序集:WorkflowSample.dll。 可以部署該程序集以運行工作流。

         使用 wfc.exe 工作流命令行編譯器

          Windows Workflow Foundation 提供一個名為 wfc.exe 的命令行工作流編譯器。 Windows Workflow Foundation 還提供一組公共類型,這些類型支持編譯工作流以開發自定義編譯器。 這些公共類型與 wfc.exe 在內部使用的類型相同。您可以使用 WorkflowCompiler 類來創建編譯器的自定義版本。

          也可以使用 WorkflowCompiler 類來編譯工作流,如下面的簡單示例所示。

      WorkflowCompiler compiler = new WorkflowCompiler();

      WorkflowCompilerParameters param = new WorkflowCompilerParameters();

      compiler.Compile(param, new string[] { "MainWorkflow.xoml" });

          有關更多信息請參見 Windows Workflow Foundation 類庫參考中的 WorkflowCompiler 類。

       

         編譯器選項

         對于 wfc.exe 工作流命令行編譯器選項將在以下代碼樣式的主題中進行介紹。

       

      14 如何序列化工作流

          Windows Workflow Foundation 框架提供用于序列化和反序列化工作流的序列化基礎結構。 默認情況下,工作流依據某些格式規則序列化為工作流標記。

          默認序列化

          新活動的開發人員自動擁有序列化為工作流標記的默認功能。 此默認序列化功能對于大多數活動應該是夠用的,但有時也可能需要自定義序列化程序。

          下面的示例演示如何使用 WorkflowMarkupSerializer 類來序列化工作流。

      using System.Xml;

      using System.IO;

      using System.Workflow.ComponentModel.Serialization;

      using System.Globalization;

      ...

      // In the implementation of your host application, create a sequential workflow.

      SequentialWorkflowActivity workflow1 = new SequentialWorkflowActivity();

       

      // Construct workflow.

      ...

       

      // Serialize workflow.

      WorkflowMarkupSerializer serializer = new WorkflowMarkupSerializer();

      StringWriter strWriter = new StringWriter(CultureInfo.InvariantCulture);

      XmlWriter xmlWriter = XmlWriter.Create(strWriter);

      serializer.Serialize(xmlWriter, workflow1);

       

      // Create a log file, open it, and write the serialized workflow to it.

      File.WriteAllText(@"C:"logfile.txt", strWriter.ToString());

          序列化基礎結構

          Windows Workflow Foundation 的默認序列化基礎結構提供序列化默認活動所需的全部類型。 有關 Windows Workflow Foundation 框架的默認活動集的信息請參見 Windows Workflow Foundation 活動。

          下面是序列化基礎結構中的重要類

      ·    WorkflowMarkupSerializer 類是序列化基礎結構中使用的序列化基類型 此類型為序列化提供一些實現序列化規則的基本服務 活動的序列化程序或者用于自定義活動的其他任何自定義序列化程序必須從此類繼承。

      ·    ActivityMarkupSerializer 類從 WorkflowMarkupSerializer 類繼承。 此類型用于序列化所有基本活動。 基本活動是復合活動之外的活動。

      ·    CompositeActivityMarkupSerializer 類從 ActivityMarkupSerializer 類繼承,它為復合活動提供序列化。CompositeActivityMarkupSerializer 增加更多方法以處理子活動,子活動可以使用它們自己的序列化提供程序來序列化。

          序列化格式規則

          工作流標記是對象層次結構的序列化形式。 對象的序列化方式取決于對象的屬性。 有兩個主要規則來幫助完成類型實例的序列化:

      ·    對象的類型定義是 XAML 中的元素名稱。

      ·    對象的屬性 (Property) 映射到 XAML 中的元素定義的屬性 (Attribute)。

          下面的代碼示例舉例說明對象序列化。

      public Class ExampleActivity : Activity

          private string property1 = "SomeValue";

          private string property2 = "SomeOtherValue";

          public string ExampleProperty

          {

              get { return property1; }

              set { property1 = value; }

          }

          public string ExampleOtherProperty

          {

              get { return property2; }

              set { property2 = value; }

          }

      // Activity.Execute and other overridden methods not included for clarity.

      }

          該類的實例如下面的 XAML 代碼示例所示進行序列化。

      <ns0:ExampleActivity ExampleOtherProperty="SomeOtherValue" x:Name="ExampleActivity" ExampleProperty="SomeValue" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:ns0="clr-namespace:CustomWFActivities;Assembly=CustomWFActivities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

      該代碼示例演示兩個字符串屬性 (Property) ExampleProperty ExampleOtherProperty 成為了 ExampleActivity 元素的屬性 (Attribute) SomeValueSomeOtherValue是兩個字段的實際值。

      當然類定義可能比代碼示例的 ExampleActivity 類要復雜得多。 在更復雜的對象的序列化方面,存在其他規則。

      注意: 

      WorkflowMarkupSerializer 不支持對嵌套類型進行序列化。 例如,如果您創建一個自定義活動并在該活動內定義嵌套類型,則您將在編譯時收到錯誤

          自定義序列化

          可以自定義序列化格式。 可以在兩個級別進行自定義。 可以提供一個全新的序列化基礎結構,這包括一個自定義序列化格式以及分別對應于每個類型的序列化。可在活動級別進行其他序列化。 序列化基礎結構仍然是由 Windows Workflow Foundation 創作框架提供的工作流標記,但各個活動布局可以更改。

       

          自定義活動

          如果您創建一個自定義序列化程序,則活動作者必須提供對該自定義序列化程序的引用,具體如下面的代碼示例所示。

      [DesignerSerializer(typeof(ExampleActivityMarkupSerializer), typeof(WorkflowMarkupSerializer))]

      public class ExampleActivity : Activity

      {

      }

          序列化程序通過使用 DesignerSerializer 屬性來指定,該屬性具有兩個參數:

      ·    第一個參數指定應當用來序列化定義了該屬性的類的實例的序列化程序。

      ·    第二個參數指定序列化程序的基類型。 序列化程序的基類型指定要使用的序列化方案。

          在 DesignerSerializer 代碼示例中,第二個屬性指定 WorkflowMarkupSerializer。 這意味著要使用的基本序列化基礎結構基于 WorkflowMarkupSerializer。

       

          定義自定義序列化程序

          自定義序列化程序是必須從序列化基類型繼承的類。 在 DesignerSerializer 代碼示例中,ExampleActivityMarkupSerializer 是 ExampleActivity 類的自定義序列化程序。 ExampleActivityMarkupSerializer 從 WorkflowMarkupSerializer 繼承,后者是該屬性的第二個參數。

          當序列化管理器開始序列化活動時,它使用類定義來確定自定義序列化程序類型,方法是:在 DesignerSerializer 屬性的第二個參數中查找 WorkflowMarkupSerializer 的基類型。 然后獲得該序列化程序的一個實例并使用它。

       

          工作流標記

          工作流標記描述可以由 Windows Workflow Foundation 運行時引擎執行的工作流。工作流標記是序列化方案的一部分,用于描述構成工作流的活動層次結構以及在活動引發事件時激活的關聯邏輯。

          工作流標記沒有任何固定的語法來描述它。 它定義可用于表示對象層次結構以及對象的屬性和方法的通用方案。每個活動都有序列化邏輯,這樣便可以在為對象定義的標記中表示活動元數據。

       

      15 使用工作流標記

          Windows Workflow Foundation 為設計人員和開發人員提供了一種通過使用可擴展應用程序標記語言 (XAML) 創建標記源文件從而創建工作流的聲明性方式。 可以將這些標記文件編譯到工作流類型中,在運行期間直接加載到工作流運行時引擎中,也可以將這些標記文件與以 C# 或 Visual Basic 實現的代碼隱藏文件一同編譯到工作流類型中。 這意味著工作流標記文件編譯與否均可,具體取決于業務原因以及是否需要額外的實現邏輯。 使用工作流標記與代碼隱藏邏輯文件類似于 ASP.NET 將演示文件與邏輯文件相分離的方式。

          有關如何將工作流標記文件直接加載到工作流運行時引擎的示例,請參見創建工作流宿主應用程序主題。

          除了在工作流標記中創建工作流之外,以 WorkflowPersistenceService 服務保持工作流時也可以使用工作流標記,這是因為用 WorkflowMarkupSerializer 對編程工作流進行序列化后,這些工作流就變成了工作流標記。 有關更多信息,請參見如何:序列化工作流和 Windows 工作流持久性服務。

          基本結構

          工作流標記的基本結構包括根節點,表示工作流的類型;接下來是該工作流中的子活動,作為嵌入的子元素。 由于工作流標記基于 XAML 元素和屬性的子集,因此工作流標記文件的結構類似于 XAML 文件的結構。 例如,工作流中的每個元素都表示為復合活動或工作流本身的節點。 節點之間的關系將得到保留,就像通過編程語言(如 C# 或 Visual Basic)創建工作流時的那樣。

       

          元素和屬性

          如前所述,工作流標記文件中的每個元素都與某個工作流組件相對應。這些元素的名稱與以編程方式創建工作流時所使用的活動類型的名稱相同。 例如,IfElseActivity 活動由 <IfElseActivity> 元素表示。對自定義活動也是如此。

          對活動成員以下例中所示方式進行聲明:

          <SampleActivity Property1="PropValue" Method="CustomMethod" Event="EventHandlerMethod"/>

          通過 XAML 還可以使用 x:Code 指令元素在工作流標記文件中插入過程代碼。代碼必須位于 CDATA 節中,以使編譯器可以編譯代碼而非將其視為聲明性 XAML 標記。 以下示例顯示如何將該元素用于 CDATA 節。

      <CodeActivity x:Name="codeActivity1" ExecuteCode="methodName1">

       <x:Code><![CDATA[

            void methodName1(object sender, EventArgs e)

            {

            }

       ]]></x:Code>

      </CodeActivity>

      注意: 

      只能在已編譯的工作流標記文件中使用 x:Code 指令元素。

      屬性

      說明

      x:Array

      類型的數組。

      x:Class

      工作流類的名稱,包括命名空間。 編譯工作流時創建此名稱的類。

      x:Name

      活動的名稱。 Activity.Name 屬性相對應。

      x:Type

      類型引用。

      x:Null

      Null 值。

      xmlns:x

      XAML 架構的命名空間。

      xmlns

      工作流 XAML 架構的命名空間。

      注:如果使用非編譯、僅 XAML 的工作流標記文件創建工作流,則 XAML 文件中不應出現 x:Class 屬性。 只有在編譯工作流時此屬性才有效。

          如果創建工作流標記文件后更改了 VB 應用程序的根命名空間,則也必須更新該工作流的 x:Class 屬性。

      posted on 2008-12-09 22:37  mjgforever  閱讀(2451)  評論(2)    收藏  舉報

      主站蜘蛛池模板: 国产 另类 在线 欧美日韩| 久久精品熟女亚洲av麻| 欧美偷窥清纯综合图区| 国产SM重味一区二区三区| 野花社区在线观看视频| 视频一区视频二区卡通动漫| 午夜成年男人免费网站| 在线观看热码亚洲av每日更新| 性姿势真人免费视频放| 国产日韩精品免费二三氏| 人妻人人妻a乱人伦青椒视频 | 91福利视频一区二区| 中文字幕制服国产精品| 男人狂桶女人高潮嗷嗷| 亚洲av永久无码精品水牛影视| 米奇影院888奇米色99在线| 男同精品视频免费观看网站| 精品成人免费自拍视频| 亚洲嫩模喷白浆在线观看| 国产精品亚洲综合久久小说| 国产精品一在线观看| 九寨沟县| 2021亚洲va在线va天堂va国产| 好男人好资源WWW社区| 人妻系列无码专区69影院| 亚洲av日韩av中文高清性色| 精品人妻无码中文字幕在线| 国产视频一区二区三区麻豆 | 乱中年女人伦av二区| 亚洲国产高清在线观看视频| 蜜臀av性久久久久蜜臀aⅴ麻豆| 一区二区不卡99精品日韩| 一出一进一爽一粗一大视频| 久热这里只有精品视频3| 亚州av第二区国产精品| 亚洲国产欧美在线人成AAAA| 亚洲国产精品综合久久20| 在线国产极品尤物你懂的| 精品无码久久久久国产电影| av午夜福利一片看久久| 在线涩涩免费观看国产精品|