通过工作流基础4.0中的代码注册自定义跟踪参与者

时间:2010-03-08 11:43:32

标签: workflow workflow-foundation workflow-foundation-4

我在尝试在工作流基础4.0中附加自定义跟踪参与者时遇到问题。我有一个继承自TrackingParticipant的类,但除了通过下面的SDK示例演示的大量凌乱的app.config条目(在system.servicemodel元素中)之外,我看不到任何其他方式将它附加到我的WorkflowServiceHost。当我只想要一个简单的自定义跟踪参与者来监听我的CustomTrackingRecord.Data.Add(key,value)调用时,这个选项似乎需要很多额外的开销和类。

public class CustomTracking : TrackingParticipant
{
    protected override void Track(TrackingRecord record, TimeSpan timeout)
    {
        CustomTrackingRecord innerRecord = (CustomTrackingRecord)record;
        var workflowInstanceId = innerRecord.InstanceId;

        Console.WriteLine("Track called for workflow '{0}'", workflowInstanceId);
    }
}

如何通过代码(而不是如下配置)将上述自定义跟踪参与者注册到workflowServiceHost实例?

  <extensions>
    <behaviorExtensions>
      <add name="historyFileTracking" type="Microsoft.Samples.HistoryFileTrackingExtensionElement, HiringRequestProcessDefinition, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />     
    </behaviorExtensions>
  </extensions>
  <behaviors>
    <serviceBehaviors>
      <behavior>
        <historyFileTracking profileName="RequestStoryTracking" path="..\..\..\Data\RequestHistory\"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <tracking>
    <profiles>
      <trackingProfile name="RequestStoryTracking">
        <workflow activityDefinitionId="*">
          <customTrackingQueries>
            <customTrackingQuery name="*" activityName="*" />
          </customTrackingQueries>
        </workflow>
      </trackingProfile>
    </profiles>
  </tracking>

1 个答案:

答案 0 :(得分:4)

只需将其作为工作流程扩展添加到WorkflowServiceHost。

var host = new WorkflowServiceHost(....);
var tracker = new CustomTracking();
host.WorkflowExtensions.Add(tracker);
host.Open();