none
カスタムアクティビティCorrelationTokenについて RRS feed

  • 質問

  • お世話になります。dai007と申します。

    下記のような事を行いたいのですが、上手くできずに困っております。

    ワークフローアクティビティライブラリにて、
    Activity1.cs
      SequenceActivity
        CreateTask
        OnTaskCreated
        SendEmail
        whileActivity
          OnTaskChanged
        CompleteTask
    といった流れのアクティビティを作成し、
    下記シーケンシャルワークフローへ使用したいと思っております。
    Workflow1.cs
      OnWorkflowItemChanged
        SetState
          上記カスタムアクティビティ
          SetState

    上記パターンでエラーとなったので、ログを調べてみたところ、
    -------------------------------------------------------------------------------------------------------------------------------------------------------------
    WinWF Internal Error, terminating workflow Id# 597f5619-635d-4209-b012-e73160433b3d 
    System.InvalidOperationException: 指定された Correlation 値は、アクティビティ Activity1.sendEmail1 の宣言 taskToken で既に初期化された Correlation 値に一致しません。    
    場所 System.Workflow.Activities.CorrelationService.ValidateCorrelation(ICollection`1 initializerProperties, ICollection`1 followerProperties, String memberName, Activity activity)    
    場所 System.Workflow.Activities.CorrelationService.InvalidateCorrelationToken(Activity activity, Type interfaceType, String methodName, Object[] messageArgs)    
    場所 System.Workflow.Activities.CallExternalMethodActivity.Execute(ActivityExecutionContext executionContext)    
    場所 System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext)    
    場所 System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext)    
    場所 System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime)    
    場所 System.Workflow.Runtime.Scheduler.Run()
    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    というメッセージが出力されていました。
    私なりに調査をしたところ(調査した情報が間違っている可能性もありますが)
    SendEmail,SetState等のActivityのCorrelationTokenには、OnWorkflowActivatedにて生成したWorkflowTokenを設定しないといけない事までは分かりました。

    今回のパターンの場合、Activity1.csのSendEmail.CorrelationTokenにWorkflow1.csのworkflowTokenを
    どのように設定すればよいのでしょうか?

    2009年10月21日 7:04