2.3 如何實現自定義監控
TrackingService是抽象類,使用工廠模式加入Runtime中
如果要自定義TrackingService,就要實現自定義的TrackingProfile和TrackingChannel
TrackingProfile可以認為是容器(包含了UserTrackPoint,WorkflowTrackPoint,ActivityTrackPoint),定義了在什麼時候(那種狀態發生變化的時候)發送TrackingRecord
TrackingChannel是抽象類,Send方法定義了對TrackingRecord的處理,可以持久化到數據庫,也可以持久化到文件或者打印輸出
InstanceCompletedOrTerminated方法,在工作流結束時被調用。
TrackingParameters的信息可以用來識別wf實例所關聯的跟蹤信道。
可以自己實現特定的TrackingQuery從持久化介質中獲得
默認的SqlTrackingQuery實現方法...實現機制...(估計是調用存儲過程取數的一個過程)
獲得自定義TrackingProfile和
如何設置自定義Tacking Pofile
TrackingProfile類圖分析(),構造容器。
WorkflowTrackPoint由TrackingWorkflowEvent枚舉定義
ActivityTrackPoint由ActivityExecutionStatus枚舉定義
UserTrackPoint:可以在自定義Acitivity的Execute方法中調用TrackData方法發送數據,可以指定對那種類型的Acitivity使用UserTrack
TrackData是在Activity中定義protected方法。protected void TrackData(object userData);
TrackingCondition的使用
ActivityTrackingCondition的使用,例如:活動的優先級屬性設置為 High 時才跟蹤電子郵件
ActivityTrackingCondition condition =
new ActivityTrackingCondition("Priority", "High");
actMatch.Conditions.Add(condition);
屬性值的形式從活動或工作流提取數據,使用ActivityDataTrackingExtract提前Activity屬性
actTrack.Extracts.Add(new ActivityDataTrackingExtract("To"));
跟蹤服務篩選器,Tacking服務,可以這樣理解:MatchingLocation定義TrackLocation定義的觸發器(只是針對Acitivity和Workflow狀態機),UserTrackingLocation定義常規需要加入的信息
UserTracking的觸發是由Activity自己實現的。
可用Tacking Pofile進行篩選,
如何掛自定義Tacking Pofile
默認的SqlTrackingService可以用ProfileUpdated事件掛自定義的TrackingProfile
自定義的TrackingService如下TrackingProfile可以持久化成XML字符串保存到XML文件中或者保存到數據庫,TrackingProfileSerializer保存成字符串。
關於TrackData
ActivityExecutionContext和Activity中都存在
圖形化跟蹤(HttpHandler)
如果是web方式:我們先序列化設計器MarkupSerialer得到XOML,調用vIEw.SaveWorkflowImage存成圖片,reponse給客戶端就可以實現,StartKit是個現成的例子。http://netfx3.com/content/WFHome.aspx 上也有例子和Jon Flanders的blog上的內容相同,可以參考ASP.Net Workflow Monitor Implementation這個例子
如果是Winform客戶端可以看http://netfx3.com/content/WFHome.ASPx
中WorkflowManager的例子:
實例分析:StarKit