《WF程式設計》系列之13 XAML啟用

2021-09-05 16:19:06 字數 1871 閱讀 8826

在有些環境中,編譯過程會變成一種負擔.想象一下,資料庫中包含了上千個為特定使用者量身打造的工作流定義.在這種情形下,我們也許想要避免總是建立新的程式集而引起的效能消耗.而我們需要的就是以最低的開銷載入工作流,然後執行.幸運的是,這正是以純xaml方式編寫工作流的優點.

如果要啟用之前建立的工作流,我們需要調整一下xoml檔案.之前我們在xoml檔案中使用x:class特性來告訴編譯器工作流定義中型別的名稱,而現在編譯器並不會建立新的類,因為xaml根本不會經歷編譯階段.請注意之前我們通過workflowmarkupserializer建立的xaml並不包含x:class特性.

<

sequentialworkflowactivity 

xmlns

=""xmlns:otc

="">

<

otc:writelineactivity 

message

="hello, workflow!"

/>

sequentialworkflowactivity

>

啟用機制只對完全定義在工作流標記中的工作流有效.因為不用經過編譯階段,我們不得不放棄一些xaml命名空間提供的功能(如內嵌**).對於clr物件來說,xaml是有效的xml序列化格式,所以啟用機制只不過直接從xaml建立了乙個物件層次結構(object hierarchy).

啟用通過workflowruntime中的createworkflow方法來啟用.我們要使用createworkflow方法的另外乙個過載,要傳遞的引數不是型別物件,而使乙個xmlreader,我們要通過xmlreader來把工作流標記以流的方式傳給runtime.

using

(workflowruntime runtime 

=new

workflowruntime())

using

(autoresetevent waithandle 

=new

autoresetevent(

false));

runtime.workflowterminated 

+=delegate

;typeprovider typeprovider 

=new

typeprovider(runtime);

typeprovider.addassembly(assembly.getexecutingassembly());

runtime.addservice(typeprovider);

workflowinstance instance 

=runtime.createworkflow(reader);

instance.start();

waithandle.waitone();}

編譯xoml檔案時,我們可以指定乙個程式集引用來指向包含自定義活動writelineactivity的程式集.當啟用工作流時,runtime仍然需要定位自定義活動的程式集,這時我們需要使用乙個typeprovider服務.typeprovider會保持工作流啟用所需的程式集引用,runtime依賴typeprovider服務來確定型別和程式集.在上邊的**中,我們以程式集引用的方式新增了正在執行的程式集.

在使用啟用工作流之前還需要考慮版本帶來的影響.當工作流編譯之後,我們可以提供程式集版本和其它元資料來標識程式集,也可以提供乙個強名稱來唯一地標識程式集並防止程式集被篡改.但是在另一方面,xoml檔案沒有內建的版本結構,所以如果我們需要版本或者密碼保護,我們需要寫一些自定義**.

我們講述了幾種生成純xaml解決方案.如果我們需要乙個輕量級的方式來建立新的工作流,那麼採用純xaml方式並結合工作流啟用功能是合適的選擇.但如果我們需要用c#或者visual basic**擴充工作流,純xaml方式就不能很好的工作了.下一節,我們看一下結合xaml和**.

WF是什麼系列之 WF控制邏輯線路的演算法

本文以控制一組邏輯線路開關為例演示wf在演算法上的應用,另外本文是結合 規則引擎 大家可以狠好的比效一下c 狀態機 規則引擎,流程圖在流程控制與演算法上的各自特點 本文的應用場景的演算法例子,我以前曾經發過,規則引擎 在 規則引擎 一文中,我分別用c wf3.x 的狀態機工作流 wf3.x 的規則引...

WF是什麼系列之 WF控制邏輯線路的演算法

本文的應用場景的演算法例子,我以前曾經發過,規則引擎 在 規則引擎 一文中,我分別用c wf3.x 的狀態機工作流 wf3.x 的規則引擎 三種方式實現 本文則以 wf4.0 的流程圖方式實現,1.y 裝置啟動要先啟動 x裝置,x裝置關閉要先關閉y裝置 2.n 裝置啟動要先啟動 m裝置,m裝置關閉要...

WF是什麼系列之 基於WF與WCF構建資料邏輯層

wf是什麼,許多對net技術有了解的人能說出一點,但又說不清楚 不論你認為wf是什麼,但不要與jbpm shark biztalk,sharepoint 這些產品做比效,這些產品有共同的特點就是面向企業業務流程應用的產品,wf不是,wf面向的開發人員 wf是乙個使用xml描述,具有ioc aop功能...