2

次のコードがあります

AutoResetEvent instanceUnloaded = new AutoResetEvent(false);

WFStepsActivity workflow = WorkflowFactory.Current.BuildWorkflow(workflowinstance, requestinstance.RequestInstanceID);
WorkflowApplication wf = new WorkflowApplication(workflow);

wf.InstanceStore = WFInstanceStore.GetInstanceStore();

WFStepsPersistenceParticipant persist = new WFStepsPersistenceParticipant();
wf.Extensions.Add(persist);
wf.PersistableIdle = (arg) =>
{
    return PersistableIdleAction.Unload;
};

wf.Unloaded = (arg) =>
{
    log.Info("WFName_" + wfsetting.Name + "_Unloaded and return.");
    instanceUnloaded.Set();
};
wf.OnUnhandledException = (arg) =>
{
    return UnhandledExceptionAction.Abort;
};

wf.Completed = (arg) =>
{
    if (arg.CompletionState == ActivityInstanceState.Closed)
    {
        persist.WorklflowCompleted = true;
    }
};

wf.Run();
instanceUnloaded.WaitOne();
return persist.WorklflowCompleted;

ここで、WFStepsActivity は、設定から構築した単なるアクティビティ構造です。現在、ワークフローはブックマークが作成されると終了します。

context.CreateBookmark(context.WorkflowInstanceId.ToString(), new System.Activities.BookmarkCallback(OnResumeBookmark));

問題は、ブックマークが作成された後、wf.Completedトリガーされないことです。

ブックマークが作成された場合に完了がトリガーされるかどうかを確認したい。

私が知っているように、キャンセル、終了すると完了イベントがトリガーされます

ブックマークされたワークフローがいったん停止すると、このイベントがトリガーされるはずではありませんか?

4

1 に答える 1

3

ブックマークによってワークフローがアイドル状態になります。つまり、ワークフローを続行して完了するには、意図的にブックマークから再開する必要があります。まず最初に: Grok ブックマーク.

誰でも正確な問題を適切に診断できるようにするのに十分なコードを提供したかどうかはわかりません(ブックマークの作成やサポートクラスなどはわかりません)。

ワークフローが例外をスローし、その詳細が飲み込まれている可能性もあります。未処理の例外をキャッチしてログに記録したい場合は、次のようにコードを修正します。

Exception error = null;
wf.OnUnhandledException = (arg) =>
{
   error = arg.UnhandledException;
   return UnhandledExceptionAction.Abort;
};

// and then after you've waited for completion...
if (error != null) {
   throw error; // or handle it another way
}

また役立つ:ワークフローの追跡の構成

于 2014-04-25T13:36:26.770 に答える