2012-02-08 36 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

相关问题