日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【飞秋】WF3.0和4.0区别介绍

發布時間:2025/3/15 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【飞秋】WF3.0和4.0区别介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近要研究下WF4.0的相關內容,將自己認識的、理解的寫下來與大家共勉,有興趣的朋友可以一起探討一下。

???? 相對于之前的3.0、3.5中的WorkFlow來說,4.0進行了很大的變動,包括流程設計工具、支持的活動的類型集合、工作流的內部的模型、執行引擎等等。對于其中的活動模型、執行引擎等內容,屬于比較理論而且深入的內容,我會在研究到一定程度之后與大家分享,希望通過本系列文章能夠和大家一起對WF3.0和4.0的區別和聯系有個全面細致深入的理解。

?

  本文主要是對3.0和4.0之間的區別做了下簡單的介紹,熟悉或者精通WF的可以跳過。

?

??? 既然3.0、3.5中的WorkFlow和4.0不同,那么我們首先來對比一下。首先從設計工具說起,分別用3.5(圖1)和4.0(圖2)創建一個順序工作流,我們可以看到下面的流程設計界面:

?

圖1(3.5中的流程設計界面)

?

圖2(4.0中的流程設計界面)

??? 從圖中我們不難看出區別,3.5中順序工作流初始化默認有個開始和結束節點,4.0默認則是一片空白。個人感覺這是一種觀念的改變,工作流始于開始、終于結束是我們傳統思維,然而開始結束本身就是一個虛活動,更像是邊界的限定,開發人員了解,用戶卻不了解;4.0所給人的信息更符合用戶思維,一個流程始于活動而終于活動。基于設計出的流程,讓開發者、業務建模人員、用戶之間能夠相互交流,分析師能夠對流程進行優化,決策者能夠更好的決策是一種趨勢,而這種趨勢必然要跨出的一步就是流程設計的可被大眾理解化。

呵呵,有點扯遠了。我們接著看看3.5(圖3)和4.0(圖4)支持的活動類型:

?

圖3(3.5支持的活動類型)

?

圖4(4.0支持的活動類型)

??? 可以看到4.0支持的活動類型不僅更多,而且分類更細致。不僅在controlFlow和原始類型中提供了基礎的活動,用來定制基本的流程,而且在FlowChart里面提供了能更加靈活的定制流程的活動類型,同時還提供用于消息、事務、錯誤處理等功能的活動

接下來看看引用的類庫以及項目文件的目錄結構:

?

.Net3.5中引用了以下類庫:

System.Workflow.Activities:定義了工作流可以創建、允許的活動集合

System.Workflow.ComponentModel:提供創建活動、工作流的基類、接口以及核心建模構造

System.Workflow.Runtime:提供一些類和接口可以控制工作流運行時引擎以及流程實例的執行

默認創建的工作流是Workflow1.cs,對于設計完的流程是用類文件的形式進行描述,即Workflow1.designer.cs,執行代碼放到Workflow1.cs中。

通過ViewCode可以看到兩個類的代碼為:

//Workflow1.cs

public sealed partial class Workflow1 : SequentialWorkflowActivity

{

public Workflow1()

{

InitializeComponent();

}

}

//Workflow1.designer.cs

partial class Workflow1

{

#region Designer generated code

?

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

[System.Diagnostics.DebuggerNonUserCode]

[System.CodeDom.Compiler.GeneratedCode("", "")]

private void InitializeComponent()

{

this.Name = "Workflow1";

}

?

#endregion

}

.NET4.0中WorkFlow引用了以下類庫:

System.Activities:包含創建和使用活動所需的所有類。使用此命名空間中的類可以定義活動、輸入輸出數據和變量

System.ServiceModel:包含用于生成服務和客戶端應用程序所需的類、枚舉和接口,這些類、枚舉和接口可以用于生成大范圍的分布式程序

System.ServiceModel.Activities:使用此命名空間中的類可以從工作流接受消息,或者向工作流發送消息,定義工作流服務的時候可以使用這些活動

默認創建的是Workflow1.xaml,定義完的流程是用xml的方式進行描述。

通過ViewCode,我們可以看到WorkFlow1.xaml中的內容:

<Activity mc:Ignorable="sap"

x:Class="WFConsoleAppTest.Workflow1"

sap:VirtualizedContainerService.HintSize="240,240"

mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation"

xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System"

xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities"

xmlns:s="clr-namespace:System;assembly=mscorlib"

xmlns:s1="clr-namespace:System;assembly=System"

xmlns:s2="clr-namespace:System;assembly=System.Xml"

xmlns:s3="clr-namespace:System;assembly=System.Core"

xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities"

xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"

xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System"

xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel"

xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core"

xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib"

xmlns:sd="clr-namespace:System.Data;assembly=System.Data"

xmlns:sl="clr-namespace:System.Linq;assembly=System.Core"

xmlns:st="clr-namespace:System.Text;assembly=mscorlib"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" />

可以看到,對于類文件、命名空間的引用,xml使用的schema限定等都在WorkFlow1.xaml中進行了描述。

.NET3.5中Program.cs中代碼如下:

class Program

{

static void Main(string[] args)

{

using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())

{

AutoResetEvent waitHandle = new AutoResetEvent(false);

workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); };

workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)

{

Console.WriteLine(e.Exception.Message);

waitHandle.Set();

};

?

WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFSequenceTest.Workflow1));

instance.Start();

?

waitHandle.WaitOne();

}

}

}

代碼中對流程實例完成、流程實例終止進行了事件的處理,然后通過用戶定義的Workflow1創建WorkflowInstance,調用instance.Start()開始執行流程。

.NET4.0中Program.cs代碼如下:

class Program

{

static void Main(string[] args)

{

WorkflowInvoker.Invoke(new Workflow1());

}

}

代碼中創建了一個Workflow1的實例,然后通過WorkflowInvoker.Invoke來開始執行流程。

?

  通過對比不難發現,4.0的流程創建執行更簡潔,也更符合思維習慣。以請假流程為例,請假人首先會填寫個請假條,然后報領導審批就是;用工作流來描述這個過程就是,首先定義個請假流程,包括請假發起環節和請假審批環節,流程定義好之后,誰想請假了,填寫請假表單,提交到領導審批環節即可;如果用程序來描述那就是設計一個請假流程(類、xaml等),創建實例并執行。我們很有可能會忘記一些事件的定制,然而有些情況下這往往會導致流程出現一些問題,例如3.5中我們需要定制兩個事件,創建并開始流程實例的代碼也比較繁瑣。

??? 總起來說4.0更靈活,更全面,更符合發展趨勢。

  文章比較淺,希望大家能通過這篇文章對3.0和4.0Workflow之間的不同有個感性的認識。
關注技術文章飛秋:http://www.freeeim.com/,24小時專業轉載。

總結

以上是生活随笔為你收集整理的【飞秋】WF3.0和4.0区别介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。