none
问个wf3并行的问题 RRS feed

  • 问题

  • 我看了好久别人的关于wf3关于状态机并行的例子
    好像大家一般认为解决办法是
    StateActivity中放多个EventDrivenActivity,然后多个EventDrivenActivity结束后判断是否多人都执行了,然后再决定是否跳转。

    我现在遇到了一个问题,就是StateActivity中放多个EventDrivenActivity,如果多个EventDrivenActivity都是同一个事件怎么办啊?

    比如状态里放了2个,分别是A部长,b部长
    a,b都是一个自定义的HandleExternalEventActivity派生类,EventName都是同一个,假设A登录,结果b对应的那个EventDrivenActivity先相应事件被触发了,然后Invoked,OnClosed依次执行。。。
    会签人数不定,我不可能一个岗位去定义一个EventName吧,那这种情况应该如何处理

    我买了一本99的《wf高级程序设计》,里面有讲到顺序工作流里加个correlationtoken解决了类似问题的办法,可是状态机里没有callExternalMethodActivity1,直接由wcf的服务触发事件,不明白怎样通过correlationtoken来搞定,网上找了半天也没看见状态机里用correlationtoken的例子

    那个告诉我如何解决这个问题啊?
    2010年5月27日 3:45

答案

  • 如果是并行执行,并且多个EventDrivenActivity的侦听事件都是同一个,可以考虑在任一个人员在提交时,然后再判断是否全部提交,是的话,则进行跳转到下一个状态,否则,则保存一个逻辑结束状态的记录。
    2010年6月25日 3:37

全部回复

  • System.Workflow.Runtime.CorrelationToken correlationtoken2 = new System.Workflow.Runtime.CorrelationToken();

    correlationtoken2.Name = "branch1";
                correlationtoken2.OwnerActivityName = "CorrelationExampleWorkflow";
                this.handleExternalEventActivity1.CorrelationToken = correlationtoken2;
      this.handleExternalEventActivity1.EventName = "EventReceived";
                this.handleExternalEventActivity1.InterfaceType = typeof(SharedWorkflows.ICorrelationExample);


    this.callExternalMethodActivity1.CorrelationToken = correlationtoken2;
                this.callExternalMethodActivity1.InterfaceType = typeof(SharedWorkflows.ICorrelationExample);
                this.callExternalMethodActivity1.MethodName = "StartDemonstration";
                this.callExternalMethodActivity1.Name = "callExternalMethodActivity1";
                workflowparameterbinding4.ParameterName = "branchId";
                workflowparameterbinding4.Value = 1;
                this.callExternalMethodActivity1.ParameterBindings.Add(workflowparameterbinding4);

    -------------------

    书上的例子

    this.callExternalMethodActivity1.CorrelationToken = correlationtoken2;

    this.handleExternalEventActivity1.CorrelationToken = correlationtoken2;

    把handleExternalEventActivity1和callExternalMethodActivity1绑定在同一个correlationtoken2上,这个实现对应我能理解

    可是状态机我都没有callExternalMethodActivity,就是不同的客户登录去触发,怎么解决啊?

    2010年5月27日 3:53
  • 累死累活找了个老外的页面

    http://www.codeproject.com/KB/WF/FireWorkflowEvent.aspx?msg=2341280#xx2341280xx

    前面他写了一堆我会的,最后我不明白的这个问题他说他不包括在项目里,therefore try to modify the Workflow1 for this case and test it with a ConsoleApplication1 program,他太高估我了...5555555555555555

     

    2010年5月27日 10:47
  • 如果是并行执行,并且多个EventDrivenActivity的侦听事件都是同一个,可以考虑在任一个人员在提交时,然后再判断是否全部提交,是的话,则进行跳转到下一个状态,否则,则保存一个逻辑结束状态的记录。
    2010年6月25日 3:37