Windows Workflow Foundation (二): 例子中的幾個概念

來源:互聯網
上載者:User
上篇隨筆介紹了WWF的基本概念,主要是那個層次,以及每個層次的功能和模組。
這次,就通過一些小例子來展示一下WWF的這些概念的意義,主要解釋的是Host和WWF的運行模型。
然後,在詳細解釋Activity和工作流程類型。

WWF可建立的項目類型有:
Console Application;
WindowsForm Application;
WebForm Application;
Windows Service等。關於WebService的使用,後邊介紹。

我們先通過一個Console Application來看看WWF的內容。
建立方法:
1:開啟vs2005,建立一個Workflow項目,選擇ConsoleApplication那個模版。
2:在給出的Sequential workflow設計介面裡(Sequential和State的區別,看上一篇Windows Workflow Foundation (一): 基本概念),加上一個CodeActivity(Activity的內容後邊將陸續寫出)。
3:在codeActivity的CodeBehind裡面寫這樣的處理
     Console.WriteLine("Hello,World");  //怎麼又是Hello,World?而不是Hello,Roy?
4:啟動Workflow的代碼。
       _workflowRuntime = new System.Workflow.Runtime.WorkflowRuntime("WorkflowRuntime");
        try
        {
            _workflowRuntime.StartRuntime();
        }
        catch
        {    }

看看,這裡面已經出現了WWF的好幾個內容了。
首先,程式模版(網上多的是,應該很好理解)。
然後,Activity,活動,WWF處理商務邏輯的核心。這裡出現了一個CodeActivity,用來寫一些代碼處理,這些處理當然被包含在WWF裡面了。 可以看到設計器的另外一個新特性:如果有些參數沒有填寫,它會給出提示,在設計期間。
後邊是WorkflowRuntime。他將在自己的處理空間裡面進行處理----馬上就要講到這個處理空間的一些問題。裡面的參數是WebConfig中配置的WWF的名字,例如:
 <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
    <section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </configSections>

上邊這個例子可能還不過癮,再看一個複雜一點的windows workflow foundation在WebApplication中的應用,使用StateMechineWorkflow 。主要是看看裡面的設計步驟和內容。
在這個例子裡,我們可以看到
1:WWF的Runtime,配置,啟動,這裡是運行wwf的基礎。上邊也有簡單的提到
2:資料對象DocumentService和帶有ExternalDataExchange繼承的事件
3:一個WWF對象:商務的流程
4:WWF的Host:使用wwf的程式

這個例子的解釋在那裡已經有了,這裡要解釋的概念就是 Runspace
“Workflows run in their own context,a context that inckides data and execution,so they naturally run in a separate thread from the host”

Host一個Runspace,比方說WebForm或者WinForm的Runspace;而WWF的運行則在另外一個程式空間(他有自己的Context上下文)。
這個的意思就是說,Host處理空間和WWF處理空間(Thread,這個翻譯可能有問題)不一樣,他們之間有通訊的問題。
大家可能都知道關於程式域之間的通訊,這個類似。

Host空間為了觸發WWF處理空間裡面的處理,就得通過事件這種方式來進行溝通,這就是DocumentService存在的意義,這就是他為什麼要能Serializable(為了序列化/還原序列化,在不同空間傳遞該對象)。

同樣的道理,如果想讓WWF裡面的Activity訪問Host裡面控制項(比方說修改WinForm表單中的一個按鈕的Text屬性),就成了在另外一個Tread來訪問Win表單,線程不安全,所以,你得使用這樣的方式來訪問:
theFrom.Button1.Invoke(....);

為瞭解決資料交換,WWF裡面有專門的幾個Activity來做這項工作,他們是UpdateData;SelectData;WaitForData;WaitForQuery。後邊將詳細介紹這四個Activity。

下一篇將詳細介紹Activity的分類和用途。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.