これを行う方法はいくつかあります。
最初のオプションはWorkflowPersistenceService自体を使用してのような何かをすることです:あなたはすでにSqlWorkflowPersistenceServiceを使用しているとして行うことを
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);
}
簡単にそれがメモリにすべてのワークフローインスタンスをロードすることの欠点を持って、あなたそれらをメモリから削除する責任があります。
2番目のオプションは、ワークフローのトレースを使用することです:
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を追加しなければならず、複雑さとオーバーヘッドを追加する独自のデータベースだということです。
ありがとう、モーリス。私は基本的に最初のオプションを実装しました。トラッキングを使用して2番目のものは私が思うが、私は後に何をしています。とにかく追跡を使用することになると思います。その場合は、そのオプションを実装します。再度、感謝します! –