我有一项任务是将记录功能添加到现有的基于工作流的解决方案中。有一个分层架构: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 :(得分:2)
WF已经支持一个名为WF Tracking的日志记录结构。您可以明智地遵循现有的基础架构,这样就不会产生任何不必要的性能开销。
您需要了解如何合并TrackingParticipants
。您需要将WorkflowInvoker.Invoke()
替换为WorkflowApplication
(或创建WorflowInvoker
的实例),以便您可以通过{添加自定义TrackingParticipant
{3}}。通过定义WF Extensions,您可以将跟踪消息限制为仅跟踪级别,事件类型和跟踪记录感兴趣的消息。
如果您希望记录自己的自定义TrackingProfile
,则可以从基础TrackingRecord
派生。
或者 - 您可以按照@Gabocat的建议构建一个包装自定义活动,但这会产生额外的性能开销,而WF Tracking则不会。