有几种方法可以做到这一点。
第一种选择是使用WorkflowPersistenceService本身做这样的事情:
var persistenceService = new SqlWorkflowPersistenceService("<<connection string>>");
var persistedWorkflows = persistenceService.GetAllWorkflows();
foreach (var persistedWorkflow in persistedWorkflows)
{
var workflowInstance = workflowRuntime.GetWorkflow(persistedWorkflow.WorkflowInstanceId);
var workflowDefinition = workflowInstance.GetWorkflowDefinition();
Console.WriteLine(workflowDefinition.GetType().FullName);
}
简单,因为已经在使用SqlWorkflowPersistenceService做的,但它具有所有工作流实例加载到内存中,你的缺点负责将它们从内存中移除。
第二个选择是使用工作流程追踪:
var trackingQuery = new SqlTrackingQuery("<<connection string>>");
var queryOptions = new SqlTrackingQueryOptions()
{
WorkflowStatus = WorkflowStatus.Running
};
var runningWorkflows = trackingQuery.GetWorkflows(queryOptions);
foreach (var runningWorkflow in runningWorkflows)
{
Console.WriteLine(runningWorkflow.WorkflowType);
}
的优点是你不需要加载实际的工作流定义到内存只是为了检查它的类型。缺点是你必须添加SqlTrackingService以及它自己的数据库增加了复杂性和开销。
谢谢,莫里斯。我基本上实现了第一个选项。尽管我认为第二个使用跟踪更多的是我。我想我们可能最终会使用跟踪,在这种情况下,我会实施该选项。再次感谢! – 2009-08-19 23:24:29