2012-02-08 62 views
1

我有一項任務將記錄功能添加到現有的基於工作流程的解決方案。有一個分層架構:BusinessLayer-> AgentLayer-> StoreLayer。在業務層有一個由一個或多個代理活動組成的xaml活動。代理活動由一個或多個商店活動組成。代理和商店活動是從CodeActivity繼承的。如何記錄工作流程基礎活動

活動由

WorkflowInvoker.Invoke(activity); 

我的任務執行的是記錄每個活動的執行。日誌輸出。應該是例如

BusinessActivity1 has been started at 11:00 8.2.2012 
AgentActivity1 has been started at 11:01 8.2.2012 
StoreActivity1 has been started at 11:02 8.2.2012 
StoreActivity1 has been ended at 11:03 8.2.2012 
AgentActivity1 has been ended at 11:04 8.2.2012 
BusinessActivity1 has been ended at 11:05 8.2.2012 

所以我的問題是什麼是記錄類似這樣的最佳做法。我不想將LogMessage寫入每個活動。我更喜歡統一的解決方案。是否存在任何聰明的解決方案?

感謝

+0

只是一個想法:您可以創建一個自定義活動,將所有其他活動包裝在工作流中。這個自定義活動可以在每次執行內部活動時執行日誌操作。我之前看到過這個模式可行(我沒有任何代碼,很抱歉),並且系統能夠跟蹤工作流服務的執行情況。 – 2012-02-08 14:46:09

回答

2

WF已經支持記錄結構,它被稱爲WF Tracking。只要遵循現有的基礎架構,您就會明智,因此不會產生任何不必要的性能開銷。你需要看看如何合併TrackingParticipants。您需要用WorkflowApplication或創建WorflowInvoker的實例)替換WorkflowInvoker.Invoke(),以便您可以通過WF Extensions添加自定義TrackingParticipant。通過定義TrackingProfile,您可以將跟蹤消息僅限於那些您感興趣的跟蹤級別,事件類型和跟蹤記錄。

如果你想記錄自己的定製TrackingRecords,你可以從基地TrackingRecord派生。

或者,您可以按照@Gabocat的建議構建包裝自定義活動,但這會導致WF Tracking無法實現的額外性能開銷。

+0

謝謝你們的靈感。我將使用跟蹤功能。 – zosim 2012-02-09 06:52:07

+0

+1好一個。忘記跟蹤,我提到的場景是在WF的早期版本中使用的。 – 2012-02-09 13:27:34