积极答复者
问个wf3并行的问题

问题
-
我看了好久别人的关于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的例子
那个告诉我如何解决这个问题啊?
答案
-
如果是并行执行,并且多个EventDrivenActivity的侦听事件都是同一个,可以考虑在任一个人员在提交时,然后再判断是否全部提交,是的话,则进行跳转到下一个状态,否则,则保存一个逻辑结束状态的记录。
- 已标记为答案 Windie Chai [MVP]Moderator 2012年7月6日 14:49
全部回复
-
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,就是不同的客户登录去触发,怎么解决啊?
-
如果是并行执行,并且多个EventDrivenActivity的侦听事件都是同一个,可以考虑在任一个人员在提交时,然后再判断是否全部提交,是的话,则进行跳转到下一个状态,否则,则保存一个逻辑结束状态的记录。
- 已标记为答案 Windie Chai [MVP]Moderator 2012年7月6日 14:49