有幾種方法可以做到這一點。
第一種選擇是使用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